[JAVA] Java 變數、表示式和資料型別詳解

老夫不正經發表於2020-03-17

資料型別

一、變數

變數: 表示儲存空間,可用來存放某一型別(整數、小數...)的資料,沒有固定值,變數值是可變的,可重複使用,也可以用來儲存某種型別的未知資料。

變數的特點

① 佔據記憶體中的一塊儲存區域;

② 該儲存區域有自己的名稱(變數名)和型別(資料型別);

③ 可以被重複使用,可以在多處使用;

④ 該區域的資料可以在同一型別範圍內不斷變化;

Java變數的定義

1.先宣告,再賦值:

int i;
i = 13;
複製程式碼

2.宣告的同時賦值:

int i = 13;
複製程式碼

3.同時宣告多個變數:

int i = 13,j = 14,k = 15;
複製程式碼

變數的分類: 根據變數在類中定義的位置的不同,把變數分成兩大類:

  • 成員變數:直接定義在類裡的變數,又稱為全域性變數或者欄位,亦或稱之為屬性。
  • 區域性變數:變數除了成員變數之外,其他的就是區域性變數;區域性變數根據定義位置的不同有3種表現形式:方法形參,方法內變數,程式碼塊變數。

變數作用域: 變數的作用範圍或者可訪問範圍,只有作用域內,變數才能被其他程式程式碼訪問。當一個變數被定義時,它的作用域就確定了: 從定義開始到定義所在的花括號結束。

變數使用規則:

  1. 變數必須先宣告,並且初始化後才能使用;
  2. 宣告變數必須有資料型別,不同的資料型別在記憶體中有不同的儲存空間;
  3. 同一作用域內變數名不能重複定義,且Java對大小寫敏感;

常量:程式中固定不變化的值,在Java中常量的生命週期從建立開始,到JVM關閉結束;

字面值常量: 也稱字面量,或者直接量,表示直接給出的一個值(可以是整數,小數,true,false等),比如:整數常量1,2,3,小數常量3.14,布林常量false,true等;

二、表示式

由數字、運算子、數字分組符號(括號)、常量、變數等能表達一個有意義的結果的排列組合;用運算子號連線的變數/常量可稱為表示式。如:

k = i + j;
i - j;
複製程式碼

表示式中運算元進行運算得到的最終結果就是表示式的結果,表示式的運算順序大多和數學一樣。

表示式

三、資料型別

Java 資料型別

分類:在Java中資料型別整體上分成兩大類:

1.基本資料型別/原生資料型別,共8個:

     整數型別 : byte short int long                    
     小數型別 :  float double
複製程式碼

2. 引用資料型別/物件資料型別: 類/介面/陣列;

3. 在Java中,整數的預設型別是int,小數的預設型別是double

boolean(布林)型別:通常用於邏輯運算和程式流程控制(條件選擇/迴圈),該型別的值只能是true 或 false,表示真或假,false和true是boolean的常量;在Java語法中不可以使用0或非0的整數來代替false和true,注意區分於C語言,C語言是允許這樣的;

(特別說明:其實在JVM(Java虛擬機器)中對boolean的處理是用0表示false,非0表示true的,但在語法中不允許的。)

預設情況下,布林型別的值是false;

整數型別: 有byte、short、int、long 這4種型別;

整型常量的四種表示形式:

① 二進位制整數:0B或0b開頭(Java7的新特性),如:int a = 0B110;

② 八進位制整數:要求以0開頭,如 int a = 012;

③ 十進位制整數:如:int a = 17;

④ 十六進位制整數:要求0X或0x開頭,如int a = 0x12;

Java語言的整型常量預設是int型,宣告long型變數需要在其後加上‘l’或‘L,因小寫的l容易和數字1相混淆,建議使用大寫L。

小數型別: 有float、double兩種型別;小數型別又稱為浮點型別,float表示單精度型別,double表示雙精度型別,但是二者都不能表示精確的小數。在精度要求高的系統比如:銀行系統,計費系統的高精度計算中,通常會使用BigDecimal型別。

Java的浮點型別常量有兩種表現形式:

  • 十進位制形式: 例如:3.14 ,168.0, 0.618
  • 科學計數法形式: 例如:3.14e2, 3.14E2, 1000E-2 ,科學計數法表示式返回的結果是double型別;這裡的e/E 表示10,即 3.14e2 = 3.14 x 10^2。

預設情況下,一個浮點型別的字面量預設是double型別.若要宣告一個常量為float型,則需在常量後加上f 或 F,double常量後面的D或d可省略。

注意:Java裡只有浮點型的變數才可以接受科學計算式結果。

字元型別(char): 字元,字母和符號;char型別:表示16位的無符號整數或者Unicode字元,Java對字元采用Unicode字元編碼。

Unicode收集了世界上所有語言文字中的符號,是一種跨平臺的編碼方式,Java的字元佔兩個位元組,可以表示一個漢字。

什麼是編碼呢?由於計算機只能表示0和1兩個數,於是人們做規定使用一個數字去表示一個特定的字元,比如a使用97表示。於是誕生了ASCII(美國資訊互動標準編碼)、Unicode這樣的字元編碼;char資料型別前256個字元和ASCII(美國資訊互動標準編碼)碼中的字元重複。

ascii 對照表

char常量有3種表示形式:

① 使用單個字元來指定字元常量,用單引號括起來,格式如:'◆'、'A','a';

char c = 'A';
複製程式碼

② 作為十進位制整數數值使用,但是資料範圍在[0,65535],格式如:97,不過列印出來的值是ASCII碼錶中對應的的符號:a。

char c = 97;
複製程式碼

③ 和②一樣,但這裡表示的是16進位制的數值,格式如:'\\uX',X表示16進位制整數;如:97的16進位制是61。那麼表示為‘\\u0061’列印出來也是a。

char c = '\\u0061';
複製程式碼

所以可以說char本質上也是整型,但資料範圍在0 ~ 65535.

引用型別:除了8種基本資料型別,其他所有型別都是引用資料型別,包括類、介面、陣列。引用資料型別預設初始值都是null;字串String其實是一個類,不屬於基本資料型別,就不在這裡講了,後期會單獨為String單獨介紹。

四、資料型別轉換

溢位:當要表示的資料超出資料型別的臨界範圍時,稱為溢位。溢位情況發生時程式並沒有做資料範圍檢查處理,此時會出現資料紊亂情況。看如下的:演示

int最大值是:2147483647,如果對 2147483647 + 1 結果會是多少呢?

int 最大值

計算結果變成了最小值**-2147483648**,不是我們預料中的2147483648;,可以把資料型別看做一個容器,把資料看做要往容器中存放的物品,比如水,水裝滿了就會溢位,想裝更多的水,就得使用更大的容器,這樣就比較好理解了;所以在使用中,要為資料選擇合適的資料型別,發生避免溢位這樣的錯誤。

資料型別轉換:把資料從一種型別轉換到另一種型別,比如:從int到long,在8大基本資料型別中,boolean不參與轉換,因為boolean不屬於數值型別。轉換規則如下:

資料型別轉換

自動型別轉換,也稱為“隱式型別轉換, 當把小資料範圍型別的數值或變數賦給另一個大資料範圍型別變數,系統可以完成自動型別轉型。這好比把裝一斤水容器裡的水倒進可以裝兩斤水的容器裡一樣。一般的,我們會直接把byte,short,char直接賦值給int型別。

當一個算術表示式中包含多個基本資料型別(boolean除外)的值時,整個算術表示式的資料型別將在資料運算時出現型別自動提升,其規則是:所有的byte、short、char型別被自動提升到int型別;整個表示式的最終結果型別被提升到表示式中型別最高的型別;

已有變數如下:
short s = 10;
byte a = 2;
int i = 5;
float f = 10.0F;
double d = 35.0;
判斷該表示式的結果型別:  (s / a) -(f / s) - (d + i)
複製程式碼

下圖便是詳細執行過程:

表示式結果型別

完結。老夫雖不正經,但老夫一身的才華

相關文章