基礎類型與包裝類型

數(shù)據(jù)類型 字節(jié)數(shù) 二進制位數(shù) 范圍 緩存值
byte 1 8 -128~127 -128~127
short 2 16 -32768~32767 -128~127
int 4 32 -2147483648~2147483647 -128~127
long 8 64 -9223372036854775808 ~ 9223372036854775807 -128~127
float 4 32 1.4E-45~3.4028235E38
double 8 64 4.9E-324~1.7976931348623157E308
char 2 16 0~65535 0~127
boolean 1 8 true/false true/false

使用注意

long型后如果不加L則默認為int型,浮點型如果不加F則默認為double型。

自動拆裝箱與緩存機制

Integer a = 0;
Integer a = Integer.valueOf(0); //手動裝箱
int b = a;
int b = a.intValue();//手動拆箱

Boolean的緩存是true,false,Byte、Short、Integer、Long的緩存都是-128到127。Character是緩存是0~127對應的字符。

在執(zhí)行Integer a = new Integer(0)時,JVM會先創(chuàng)建一個對象,值為0,再把這個對象的引用賦值給a。基于節(jié)約內存和效率等的考慮,Java對包裝類的values方法做了一些優(yōu)化。如Integer,在執(zhí)行Integer a = Integer.values(0)時,Java會在緩存中直接找到之前創(chuàng)建好的緩存,直接把0相應的引用給a。

Integer a1 = 0;//Integer a = Integer.value(0)
Integer b1 = 0;
Integer c1 = new Integer(0);
Integer a2 = 128;
Integer b2 = 128;
Integer c2 = new Integer(128);
System.out.println(a1 == b1); //true(緩存范圍是-128~127)
System.out.println(a1 == c1); //false
System.out.println(a2 == b2); //false
System.out.println(a2 == c2); //false

這里Integer和int類型進行"=="比較,會把Integer類型自動拆箱進行比較。

long a = 1L;
int b = 1;
short c = 1;
System.out.println(a == b); //true
System.out.println(a == c); //true

使用原則

最后我們來整理一下基本類和包裝類在實際使用時,應該遵循哪些原則?
1.盡量使用values方法。最大可能使用緩存,提高程序的效率。
2.類變量使用包裝類。想象有一個和數(shù)據(jù)庫表對應的實體類,如果你使用的基本數(shù)據(jù)類型,在插入時,可能會插入一些讓你意想不到的初始值。
3.方法的參數(shù)要使用包裝類。使用包裝類意味著你在調用時,可以令若干個參數(shù)為null。null是無意義的。但是如果你使用了基本數(shù)據(jù)類型,那么,你將不得不傳入一個值,即使這個值對你來說,沒有什么意義。
4.方法的返回值要根據(jù)是否可為null來確定使用包裝類還是基本類。當一個方法的返回值,一定不會出現(xiàn)null的情況時,推薦使用基本類來作為返回值。這樣,調用者在拿到這個方法的返回值時,就不必擔心它是為null了。
5.方法內部(局部變量)使用基本類型?;绢愋偷臅r間效率和效率上來說,都是要優(yōu)于包裝類的。所以,在方法內部,能使用基本類型盡量不要使用包裝類。
6.小數(shù)的計算。嚴格來說,這條不屬于基本類型和包裝類的內容,但是,這里順便提交,當涉及到小數(shù)的計算時,要考慮到計算的精度問題,可以使用BigDecimal,也可以通過縮小計量單位,達到化零為整的目的,這個,根據(jù)具體場景來確定。

彩蛋

如果定義int類型的i為int的最大值,那么i + 1會怎么樣呢?

int i = Integer.MAX_VALUE;
System.out.println(i);
System.out.println(i + 1);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容