1 Java走過的坑 整型池比較

2021-09-23 19:50:11 字數 1325 閱讀 1413

看看如下**,以下所有**均在jdk1.8下測試通過,原始碼可能會有更新,望注意

public

class

integerpool 

}控制台輸出:

true

true

false

true

我們可以看出,integer型別的變數為1和127的時候用「==」進行比較都是正確的,

當值為128的時候比較出現了false,但是用equals方法比較的對的。

解釋如下:

new產生的integer物件

new宣告的就是要生成乙個新的物件,2個物件比較記憶體位址肯定不相等,比較結果為false

裝箱生成的物件

對於這一點首先要說明的是裝箱動作是通過integer.valueof方法進行的。

integer i = 100; (注意:不是 int i = 100; )

實際上,執行上面那句**的時候,系統為我們執行了:integer i = integer.valueof(100); 此即基本資料型別的自動裝箱功能。

valueof如何生成物件

public

static integer valueof

(int i)

這是jdk1.8的原始碼,low=-128,h=127,這段**意為如果是-128到127之間的int型別轉換為integer物件,則直接從integercache裡獲取,來看看integercache這個類

private

static

class

integercache

catch( numberformatexception nfe) 

}high = h;

cache = new integer[(high - low) + 1];

int j = low;

for(int k = 0; k < cache.length; k++)

cache[k] = new integer(j++);

// range [-128, 127] must be interned (jls7 5.1.7)

assert integercache.high >= 127;

}private

integercache

(){}

}

總結:整型池的出現提高了系統效能,在判斷物件是否相等的時候盡量使用equals方法,避免使用「==」產生非預期結果。

通過包裝類的valueof生成包裝例項可以提高空間和時間效能。

1 java語言基礎組成 1

如 class,public等等。如 類名,變數名 規定 不能數字開頭,必須由a z a z 0 9 組成。如 aa0 規範 開頭必須大寫 1 單行注釋 如 class myfirstclass 這是我的第乙個類 2 多行注釋 如 class myfirstclass 這兩行 被注釋掉了 3 文件注...

複習1 Java基礎之switch

什麼是switch結構 switch結構其實也是一種類似於處理多分枝選擇的一種程式結構 switch結構有如下規則 1 表示式的返回值必須是一下幾種型別之一 char byte short int且必須是正確的結果。2 case語句中的取值必須是常量,所有case中的取值應該是不同的。3 defau...

Java內部類1 Java靜態內部類

靜態內部類是指使用 static 修飾的內部類。示例 如下 public class outer 上述示例中的inner 類就是靜態內部類。靜態內部類有如下特點。1 在建立靜態內部類的例項時,不需要建立外部類的例項。public class outer class otherclass 2 靜態內部...