包裝類型和基本類型區(qū)別

簡介

Java 的每個基本類型都對應(yīng)了一個包裝類型,比如說 int 的包裝類型為 Integer,double 的包裝類型為 Double。基本類型和包裝類型的區(qū)別主要有以下 4 點(diǎn)

區(qū)別

區(qū)別1 包裝類型可以為 null,而基本類型不可以

例如Integer的默認(rèn)值是null,int的默認(rèn)值是0

它使得包裝類型可以應(yīng)用于 POJO 中,而基本類型則不行。因?yàn)閿?shù)據(jù)庫的查詢結(jié)果可能是 null,如果使用基本類型的話,因?yàn)橐詣硬鹣洌▽b類型轉(zhuǎn)為基本類型,比如說把 Integer 對象轉(zhuǎn)換成 int 值),就會拋出 NullPointerException 的異常。

區(qū)別2 包裝類型可用于泛型,而基本類型不可以

List<int> list = new ArrayList<>();
// 提示 Syntax error, insert "Dimensions" to complete ReferenceType
List<Integer> list = new ArrayList<>();

區(qū)別3 基本類型比包裝類型更高效,占用內(nèi)存更少

區(qū)別4 相同的一個數(shù)據(jù),包裝類生成的是兩個對象,其內(nèi)存地址不同

兩個包裝類型的值可以相同,但卻不相等:

Integer chenmo = new Integer(10);
Integer wanger = new Integer(10);

System.out.println(chenmo == wanger); // false
System.out.println(chenmo.equals(wanger )); // true

自動裝箱和自動拆箱

把基本類型轉(zhuǎn)換成包裝類型的過程叫做裝箱
反之,把包裝類型轉(zhuǎn)換成基本類型的過程叫做拆箱

要點(diǎn)

1、由于Integer變量實(shí)際上是對一個Integer對象的引用,所以兩個通過new生成的Integer變量永遠(yuǎn)是不相等的(因?yàn)閚ew生成的是兩個對象,其內(nèi)存地址不同)。

Integer i = new Integer(100);
Integer j = new Integer(100);
System.out.print(i == j); //false

2、Integer變量和int變量比較時,只要兩個變量的值是向等的,則結(jié)果為true(因?yàn)榘b類Integer和基本數(shù)據(jù)類型int比較時,java會自動拆包裝為int,然后進(jìn)行比較,實(shí)際上就變?yōu)閮蓚€int變量的比較)

Integer i = new Integer(100);
int j = 100;
System.out.print(i == j); //true

3、非new生成的Integer變量和new Integer()生成的變量比較時,結(jié)果為false。(因?yàn)榉莕ew生成的Integer變量指向的是java常量池中的對象,而new Integer()生成的變量指向堆中新建的對象,兩者在內(nèi)存中的地址不同)

Integer i = new Integer(100);
Integer j = 100;
System.out.print(i == j); //false

4、對于兩個非new生成的Integer對象,進(jìn)行比較時,如果兩個變量的值在區(qū)間-128到127之間,則比較結(jié)果為true,如果兩個變量的值不在此區(qū)間,則比較結(jié)果為false

Integer i = 100;
Integer j = 100;
System.out.print(i == j); //true
Integer i = 128;
Integer j = 128;
System.out.print(i == j); //false
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容