八大基本數據類型與之相對應的封裝類:

基本數據類型封裝類的方法:

裝箱和拆箱需要注意的問題:

裝箱過程:

1、通過new的方法可以裝箱,但是隨着時代的進步這種方法已經逐漸淘汰。

2、目前所認同的裝箱方法是通過調用valueOf(); 來進行實現。

//現在已經不建議使用Integer a = new Integer(10);//現在使用的是Integer b = Integer.valueOf(10);

基本數據類型、基本數據類型封裝類進行比較的問題:

1、通過創建實例化進行比較:

Integer a = new Integer(10);Integer b = new Integer(10);System.out.println(a == b);System.out.println(a.equals(b));

Java控制檯輸出結果爲:

false

true

也就是說,通過創建實例來進行賦值,兩個實例出來的對象並不是一樣,而通過equals 方法進行對比會發現兩個值是一樣的

也就是說,a 和 b 並不是相同的對象,但是兩個值是一樣的。

2、通過valueOf進行對比:

Integer a = Integer.valueOf(10);Integer b = Integer.valueOf(10);System.out.println(a == b);System.out.println(a.equals(b));

Java控制檯輸出的結果是:

true

true

通過 valueOf 進行賦值創建的 Integer 類型的 a 和 b 兩個對象和值是一樣的。因爲在Java默認的情況下,自動緩存-128~127 之間的整數,也就是說你賦值給 a 的時候,這時候指向的是Java緩存的“1”,在賦值給 b 的時候,還是指向Java系統中緩存的“1”,此時的 a 和 b 指向的位置是一樣的。

3、通過創建字符串進行對比:

String a = "hello";String b = "hello";System.out.println(a == b);System.out.println(a.equals(b));String a1 = new String("hello");String b1 = new String("hello");System.out.println(a1 == b1);System.out.println(a1.equals(b1));

Java控制檯的輸出結果爲:

true

true

false

true

這時候你會發現,通過字符串直接創建的 a 和 b 進行對比都是 ture ,還是因爲Java系統將常用的字符串進行了緩存,創建 a 和 b 的時候,Java將直接已經緩存出來的“hello”進行了賦值,也就是結果是一樣的。

上面Java代碼的 5~8 行是說,通過 new 創建一個 String 類型的實例化,在進行對比也就產生了不同的結果, a1 和 b1 的不是通過緩存直接賦值的,而是通過構造對象來賦值,此時的 a1 和 b1 是完全不同的兩個對象。

【重點】:

如果按照棧和堆之間的關係進行理解的話,此時在堆上應該有三個“hello”的對象,一個是系統緩存的,一個是通過 a1 創建出來的,一個是通過 b1 創建出來的。

舉報/反饋
相關文章