看看如下**,以下所有**均在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 靜態內部...