java中八大數據類型的儲存空間以及使用場景表示如下
)1.int:4字節,可以表示的數為-2^31 - 2^31-1。整數的默認類型。封裝類也如此 。整數相除的時候,會舍棄小數部分。結果也是整數,例如 5/3 = 1;且整數在運算的時候,要注意內存溢出的問題。
)2.long:8字節,可以表示的數為 -2^63 -- 2^63-1。常用來表示int表示不了的整數類型。例如System.currentTimeMills()方法,返回的是1970.1.1到今天所經歷的毫秒數。這個數字就是int所不能表達的,必須用long來表達。如果long類型還不能表達你所要的整數,推薦用bigInteger,可以表示任意的整數
long a = 20;是可以的,但是如要使用他的封裝類,那么數字后面必須加L/l 例如 Long a = 20L;
)3.float:4字節,由於浮點數的默認類型是double,因此想使用float的時候就要在浮點數后面加f/F。整數后面可以不用加,因為這是強制轉化。在封裝類Float中,無論是整數還是浮點數,后面都要加f/F。
)4.double:8字節:常用來表示浮點數。默認的浮點數數據類型(Double中也如此)。且在計算機二進制中,無法正確的表示十分之一。所以會出現舍入誤差。
如果double類也無法達到你所要表示的浮點數,推薦使用BigDecimal來表示,他可以表示任意的浮點數。
)5.boolean:1個字節:只有兩種值,true/flase
)6 char:2字節,只能表示0-2^16-1也就是0- 65535的整數。這個值對於Unicode編碼。對於世界上所有的字符符號。對char類型和他的包裝類Character的賦值如下
)6.1 char a = 5254;直接使用(0-65535)常量賦值.
)6.2 char a = ‘A’; 直接使用字符賦值
)6.3 char a = ‘\u0041’使用Unicode中16進制的格式
由於java中某些字符有獨特的意義,因此要使用這些字符時,需要用轉義字符 ‘\’
)7.byte:1字節,用來表示 -128 - 127之間的整數。賦值的時候可以直接用整數常量賦值。對其包裝類也是如此。即 Byte(byte) a = 20;
)8.short :2字節,用來表示-2^15 - 2^15-1之間的整數。賦值的時候可以直接用整數常量,對其包裝類也是如此。即 Short(short) b = 20;
接下來時基本數據類型之間的轉化
)自動類型轉化:從小類型到大類型之間的轉化稱為自動類型轉化,因為大類型肯定可以表示小類型的數據,不會發生精度喪失。編譯器會幫我們自動的進行自動類型轉化。類型間的大小關系如下。在多種類型的運算中,結果會自動向較大的類型轉化。且在三目運算符中,結果也會向較大的數據類型轉化,如
int a = (5 > 4)? 20 : 6.0; 此時a為20.0.因為在三目運算符中有浮點數,因此,結果會自動向大類型轉化。
也就是說,該圖中左邊的小類型都能被編譯器自動轉化成右邊的大類型。
)強制類型轉化:從大類型到小類型之間的轉化。需要強制轉化符。且可能出現精度喪失或者精度溢出的風險。精度喪失指的是小類型無法准確的描述大類型的數據,尤其時浮點數。很可能小數點后面的幾個就不見了。精度喪失不會四舍五入。而是直接抹去后面無法表示的內容。例如 int a = (int) 20.56484615;a = 20;
精度溢出是指大類型的數據超出了小類型的容量,此時編譯器不會報錯,但是結果就不如你意了。例如 int a = (int)1024^4*20; 此時a = 0;
最后說一個難點,就是int/short/byte/char之間的賦值,有他們獨特的規定。也就說說,short/byte/char類型的賦值。如果賦值為一個整數常量,雖然整數常量默認是int,但是也無須進行強制轉化。但是如果賦值為一個變量,無論該變量內部是否為整數,都必須進行強制轉化。且他們三者在運算的時候,要先自動轉化為int之后,再開始運算,也就是說,運算結果都是int。那么這個時候,就必須對這個結果進行強制類型轉化才能賦值給byte,char,short他們了。
在java運算符中,+=、-=、*=、/=、++、--、%=,這些運算符都會自動幫你進行類型轉化,包括強轉類型轉化,因此byte a = 1; a += 1;就不會報錯。無需顯示進行強制轉化。
例如: byte a = 20;(雖然20默認是int,但是不用強制轉化)
byte a = 20 + 20;(此時也無需進行強轉,因為賦值為整數常量)
byte b = a + 20;(此時a在運算的時候,自動轉化成了int,運算結果也是int,此時該寫法就是錯的。因為int的值不能直接賦給byte,必須進行強制轉化)
改為 byte b = (byte) a + 20;
int a = 20; chat b = a;(此時b賦值不是一個整數常量,而是一個變量,因此就要進行強轉,要不然會報錯)