Java 进阶——自动装箱和自动拆箱
1、什么是自動裝箱拆箱
基本數據類型的自動裝箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0開始提供的功能。
一般我們要創建一個類的對象實例的時候,我們會這樣:
?Class a = new Class(parameter);
?當我們創建一個Integer對象時,卻可以這樣:
?Integer i = 100; (注意:不是 int i = 100; )
實際上,執行上面那句代碼的時候,系統為我們執行了:Integer i = Integer.valueOf(100);
此即基本數據類型的自動裝箱功能。
?
2、基本數據類型與對象的差別
基本數據類型不是對象,也就是使用int、double、boolean等定義的變量、常量。
基本數據類型沒有可調用的方法。
eg:? int t = 1;???? t.? 后面是沒有方法滴。
?Integer t =1; t.? 后面就有很多方法可讓你調用了。
1)什么時候自動裝箱
例如:Integer i = 100;
相當于編譯器自動為您作以下的語法編譯:Integer i = Integer.valueOf(100);
2)什么時候自動拆箱
自動拆箱(unboxing),也就是將對象中的基本數據從對象中自動取出。如下可實現自動拆箱:
[java]?view plaincopy在進行運算時,也可以進行拆箱。
[java]?view plaincopy?
3、Integer的自動裝箱
[java]?view plaincopy輸出的結果為:
[java]?view plaincopy?說明:
equals() 比較的是兩個對象的值(內容)是否相同。
"==" 比較的是兩個對象的引用(內存地址)是否相同,也用來比較兩個基本數據類型的變量值是否相等。?
?
前面說過,int 的自動裝箱,是系統執行了 Integer.valueOf(int i),先看看Integer.Java的源碼:
[java]?view plaincopy對于–128到127(默認是127)之間的值,Integer.valueOf(int i) 返回的是緩存的Integer對象(并不是新建對象)
所以范例中,i3 與 i4實際上是指向同一個對象。
而其他值,執行Integer.valueOf(int i) 返回的是一個新建的 Integer對象,所以范例中,i1與i2 指向的是不同的對象。
當然,當不使用自動裝箱功能的時候,情況與普通類對象一樣,請看下例:
[java]?view plaincopy?
4、String 的拆箱裝箱
先看個例子:
[java]?view plaincopy這個怎么解釋呢?貌似看不出什么。那再看個例子。
[java]?view plaincopy 第二個例子中,e的初始值與d并不同,因此e與d是各自創建了個對象,(e==d)為false 。
同理可知,第一個例子中的str3與str4也是各自new了個對象,而str1與str2卻是引用了同一個對象。
總結
以上是生活随笔為你收集整理的Java 进阶——自动装箱和自动拆箱的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Workbox.routing v3.x
- 下一篇: WordPress教程 – WordPr