1. 程式人生 > >Java SE之裝箱與拆箱

Java SE之裝箱與拆箱

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 ;

Java SE之裝箱與拆箱