Java的自動拆箱和裝箱
來源:程序員人生 發(fā)布時間:2014-10-08 16:33:45 閱讀次數(shù):1854次
Java 1.5中引入了自動裝箱和拆箱機制
自動裝箱:(看代碼)
<span style="font-family:SimSun;font-size:18px;color:#000000;">//自動裝箱:把基本類型用它們所對應(yīng)的引用類型包裝起來,使它們具有對象的屬性
Integer integer_a = 8; </span>
自動拆箱:(看代碼)
<span style="font-family:SimSun;font-size:18px;color:#000000;">//自動拆箱:<span style="font-family:SimSun;font-size:12px;color:#000000;">將Integer這樣的引用類型的對象重新簡化為基本類型的數(shù)據(jù)。</span> </span>
<span style="font-family:SimSun;font-size:18px;color:#000000;"> int a = new Integer(8);</span>
注意:自動裝箱和拆箱是由編譯器來完成的,編譯器會在編譯期根據(jù)語法決定是否進行裝箱和拆箱動作。
Java使用自動裝箱和拆箱機制,節(jié)省了常用數(shù)值的內(nèi)存開銷和創(chuàng)建對象的開銷,提高了效率。
(1)Integer和 int之間可以進行各種比較,Integer對象將自動拆箱后與int值比較(看代碼)
<span style="font-family:SimSun;font-size:18px;color:#000000;"> Integer integer_a = 8;
int a = 8;
System.out.println(integer_a == a);// true
System.out.println(integer_a > a);// false
System.out.println(integer_a < a); // false
Integer integer_b = 200;
int b = 200;
System.out.println(integer_b == b);// true
System.out.println(integer_b > b); // false
System.out.println(integer_b < b); // false
</span>
(2)兩個Integer對象之間也可以用>、<等符號比較大小,兩個Integer對象都拆箱后,再比較大小(看代碼)
<span style="font-family:SimSun;font-size:18px;color:#000000;"> Integer integer_c=8;
Integer integer_d=200;
System.out.println(integer_c>integer_d);//false
System.out.println(integer_c<integer_d);//true</span>
(3) 兩個Integer對象最好不要用==比較。因為:-128~127范圍(一般是這個范圍)內(nèi)向自動裝箱池取緩存內(nèi)對象用,所以相等,該范圍外是兩個不同對象引用比較,所以不等。(看代碼)
<span style="font-family:SimSun;font-size:18px;color:#000000;"> Integer integer_a_one = -128;
Integer integer_b_one = -128;
System.out.println(integer_a_one == integer_b_one);// true
Integer integer_a_two = 127;
Integer integer_b_two = 127;
System.out.println(integer_a_two == integer_b_two);// true
Integer integer_c_one = -129;
Integer integer_d_one = -129;
System.out.println(integer_c_one == integer_d_one);// false
Integer integer_c_two = 128;
Integer integer_d_two = 128;
System.out.println(integer_c_two == integer_d_two);// false</span>
總結(jié):基本數(shù)據(jù)類型對應(yīng)的包裝類型自動裝箱池是有一定的大小的,看源碼就可以了解下
Int,Byte,Short,Long對應(yīng)的是-128~127
Character對應(yīng)的是0~127
Float和Double沒有自動裝箱池(看代碼)
<span style="font-family:SimSun;font-size:18px;color:#000000;"> Float fa=3f;
Float fb=3f;
System.out.println(fa==fb);//false
Double da=3d;
Double db=3d;
System.out.println(da==db);//false</span>
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈