Java核心技術閱讀筆記 java中的自動拆裝箱與緩存

最近在讀《深入理解java核心技術》 , 對于里面比較重要的知識點做一個記錄!
眾所周知,Java是一個面向對象的語言,而java中的基本數據類型卻不是面向對象的!為了解決這個問題,Java為每個基本數據類型引入一個對應的類,稱為包裝類!
byte -- Byte  boolean -- Boolean short -- Short  char -- Character
int -- Integer  long -- Long  float -- Float  double -- Double
為什么需要包裝類?
因為java是面向對象的語言,很多地方需要使用對象而不是基本數據類型 。比如,在集合類中,無法將int,double放進去,因為集合容器要求的元素是object類型 。
裝箱:把基本數據類型轉換成包裝類的過程
拆箱:把包裝類換成基本數據類型的過程
自動拆箱:將基本數據類型自動轉換成對應的包裝類
自動裝箱:將包裝類自動轉換成對應的基本數據類型
自動拆箱與自動裝箱的原理:
public static void main(String[] args){
Integer integer = 1;//裝箱
int i  = integer;//拆箱
}
自動裝箱都是通過包裝類的valueOf()方法實現的,自動拆箱都是通過包裝類對象的xxxvalue()方法實現的 。
在那些場景下,java會自動拆裝箱?
場景一:將基本數據類型放入集合類
把基本數據類型放入集合類
import java.util.ArrayList;import java.util.List;public class demo2 {public static void main(String[] args){List<Integer> list = new ArrayList<>();for(int i = 0;i < 10 ; i++){list.add(i);}System.out.println(list);}}

Java核心技術閱讀筆記 java中的自動拆裝箱與緩存

文章插圖
場景二:包裝類和基本類型的大小比較
包裝類與基本數據類型進行比較運算,是先將包裝類拆箱成基本數據類型,然后再進行比較
場景三:包裝類的運算
兩個包裝類會被自動拆箱成基本類型進行計算
場景四:自動拆裝箱與緩存
public class demo1 {public static void main(String[] args){Integer integer1 = 22;Integer integer2 = 22;if(integer1 == integer2){System.out.println("integer1 == integer2");}else{System.out.println("integer1 != integer2");}Integer integer3 = 300;Integer integer4 = 300;if(integer3.equals(integer4)){System.out.println("integer3 == integer4");}else{System.out.println("integer3 != integer4");}}}在java中==表示對象引用,而equals表示比較的值
所以上述結果都為true , 如果第二個改為==結果就為false,原因是和Integer中的緩存機制有關,當需要進行自動裝箱時 , 如果數字在-128-127之間,則會直接使用緩存中的對象,而不是重新創建一個對象 。
【Java核心技術閱讀筆記 java中的自動拆裝箱與緩存】

    推薦閱讀