裝箱拆箱的要點(diǎn)
- 自動(dòng)裝箱和拆箱從Java 1.5開始引入,目的是將原始類型值轉(zhuǎn)自動(dòng)地轉(zhuǎn)換成對應(yīng)的對象或者反過來发钝。
- 自動(dòng)裝箱時(shí)編譯器調(diào)用valueOf將原始類型值轉(zhuǎn)換成對象,同時(shí)自動(dòng)拆箱時(shí)波闹,編譯器通過調(diào)用類似intValue(),doubleValue()這類的方法將對象轉(zhuǎn)換成原始類型值酝豪。
自動(dòng)裝箱的一下注意
- 自動(dòng)裝箱的一個(gè)問題是,如果在一個(gè)很長的循環(huán)中進(jìn)行自動(dòng)裝箱的操作就會(huì)產(chǎn)生非洲多的無用對象,會(huì)降低程序的性能并且加重了垃圾回收的工作量.
- 當(dāng)重載遇上自動(dòng)裝箱時(shí),不會(huì)發(fā)生自動(dòng)裝箱操作.
- "=="可以用于原始值進(jìn)行比較精堕,也可以用于對象進(jìn)行比較孵淘,當(dāng)用于對象與對象之間比較時(shí),比較的不是對象代表的值歹篓,而是檢查兩個(gè)對象是否是同一對象瘫证,這個(gè)比較過程中沒有自動(dòng)裝箱發(fā)生。進(jìn)行對象值比較不應(yīng)該使用”==“庄撮,而應(yīng)該使用對象對應(yīng)的equals方法.
Integer num1 = 1; // 自動(dòng)裝箱
int num2 = 1;
System.out.println(num1 == num2); // true
Integer obj1 = 1; // 自動(dòng)裝箱,調(diào)用Integer.valueOf()方法
Integer obj2 = 1; // 自動(dòng)裝箱,調(diào)用Integer.valueOf()方法
System.out.println(obj1 == obj2); // true
Integer one = new Integer(1);
Integer anotherOne = new Integer(1);
// one 和 anotherOn 為不同對象
System.out.println(one == anotherOne); // false
System.out.println(one.equals(anotherOne)); //true
- 另一個(gè)需要避免的問題就是混亂使用對象和原始數(shù)據(jù)值背捌,一個(gè)具體的例子就是當(dāng)我們在一個(gè)原始數(shù)據(jù)值與一個(gè)對象進(jìn)行比較時(shí),如果這個(gè)對象沒有進(jìn)行初始化或者為null,就會(huì)拋出NullPointerException.
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者