Java SE之裝箱與拆箱
阿新 • • 發佈:2017-07-12
fin valueof targe 單純 數值 test 構造 簡化 ble 對象包裝器、自動裝箱與拆箱 2016/11/30 晚
特點:
1.所有的基本類型都有一個包裝器類與之對應。[Integer,Boolean,Long,Character,Short,Float,Double,Void,Byte] 2.對象包裝器類是final的,意味著: ①不能定義他們的子類。 ②一旦構造了包裝器,就不允許修改包裝在其中的值.//如何理解其深意?內部不可變,外部裝拆 Eg1. public static void triple(Integer x){ //won‘t work 。。。 } //Integer x做形參,在函數體內是無法修改其值的。 Eg2. public static void triple(int x){ //will work x = x+1; } //對應的基本類型int x做形參,在函數體內是無法修改其值的。 3.利用包裝器的類特性為基本類型使用泛型。泛型<>的尖括號內的類型參數,不允許是基本類型。【泛型只允許類類型】
Eg.我們要定義一個整型數組列表。而尖括號內的參數是不允許是基本類型,
即:不允許寫成ArrayList<int>. 解決辦法:ArrayList<Integer>
原理:
1.裝箱:把基本類型用它們相應的引用類型包裝起來,使其具有類對象的性質。
Eg.Integer x = 100;
自動裝箱[聲明並創建int x,將x的值放入Integer類中] (編譯器調用的是static Integer valueOf(int i))
2.拆箱:和裝箱相反,將引用類型的對象簡化成值類型的數據。
Eg.int y = new Integer(100); 自動拆箱
Eg. Integer n=3;
n++; // [n拆箱;自增;n裝箱] 註意與作形參的包裝器區別。
誤區:
1.==與.equals(Object obj):
A.java的==有兩種作用:【用於比較對象的存儲區域或比較基本類型的數值】
①用於比較兩對象是否指向同一存儲區域. 【比較對象的存儲區域】
②用於比較兩對象包裝器對象:[具體分情況:]
a.比較兩包裝器的值:滿足自動規範對象要求:int,short∈[-128,127];boolean,byte,char≤127 【比較基本類型】
b.不滿足a條件時,執行①.
Eg3.Integer a = 1000;
Integer b = 1000;
(a == b) //result:fasle; 【比較對象的存儲區域】
必須雙方均為包裝類對象,才以對象方式進行比較
Eg4.Integer a =100;
Integer b =100;
(a==b) //result:true; 【比較基本類型】
Eg5.Integer a = 100;
int b = 100;
(a==b) //result:true; 【比較基本類型】
Eg6.int a = 1000;
Integer b = 1000;
(a==b) //result:true; 【比較基本類型】一旦有一方為基本類型,就以基本類型數值比較 B..equals(Object obj)僅用於單純地進行比較兩對象的內容,而非存儲區域!
綜上,在比較兩對象的內容時,建議使用equals()方法。
常用方法:
.equals()
.toString()
.praseX() //字符串與基本類型值的轉化的常用方法
.compareTo()
.XValue()
.valueOf() //自動裝箱時也會調用。
效率:包裝類的效率遠遠低於基本類型。
原因:每個值[已被包裝類轉為常量]已被包裝在對象中。
但可以用於構造小型集合,此時程序員操作的方便與快捷性要比執行效率更重要。
=================================================================
牛客網:
https://www.nowcoder.com/profile/2563558/test/7001273/36316#summary ;
1.所有的基本類型都有一個包裝器類與之對應。[Integer,Boolean,Long,Character,Short,Float,Double,Void,Byte] 2.對象包裝器類是final的,意味著: ①不能定義他們的子類。 ②一旦構造了包裝器,就不允許修改包裝在其中的值.//如何理解其深意?內部不可變,外部裝拆 Eg1. public static void triple(Integer x){ //won‘t work 。。。 } //Integer x做形參,在函數體內是無法修改其值的。 Eg2. public static void triple(int x){ //will work x = x+1; } //對應的基本類型int x做形參,在函數體內是無法修改其值的。 3.利用包裝器的類特性為基本類型使用泛型。泛型<>的尖括號內的類型參數,不允許是基本類型。【泛型只允許類類型】
=================================================================
牛客網:
https://www.nowcoder.com/profile/2563558/test/7001273/36316#summary ;
Java SE之裝箱與拆箱