Integer型別物件比較

2021-09-05 12:16:56 字數 978 閱讀 6920

先看一段**

integer i1 = 1813;

integer i2 = 1813;

system.out.println(i1==i2);

integer i3 = 127;

integer i4 = 127;

system.out.println(i3==i4);

列印結果:

false

true

i1==i2 結果是false容易理解,物件的比較嘛,==比較的是引用,不同的物件引用位址不一樣;

那麼i3==i4 結果是true又是為什麼呢?

當我們給乙個integer賦予乙個int型別的時候會呼叫integer的靜態方法valueof。

具體來看看integer.valueof的原始碼

public static integer valueof(int i)
在integercache中cache陣列初始化如下,存入了-128 - 127的值

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

int j = low;

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

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

從上面我們可以知道給interger 賦予的int數值在-128 - 127的時候,直接從cache中獲取,這些cache引用對integer物件位址是不變的,但是不在這個範圍內的數字,則new integer(i) 這個位址是新的位址,不可能一樣的

所以以後比較應該這麼寫法:

integer i1 = 1813;

integer i2 = 1813;

system.out.println(i1.intvalue()==i2.intvalue());

工作隨筆 integer物件比較

問題 對於integer物件,當比較2 2的時候,返回的值是true還是false?當比較2000 2000的時候,返回的值是true還是false?回答 當比較2 2的時候,返回的值是true 當比較2000 2000的時候,返回的值是false。理由 equal比較是兩個值的大小是否能夠相等 比...

Integer物件的比較問題

integer a 1 integer b 1 integer c 500 integer d 500 system.out.println a b system.out.println c d integer aa new integer 10 integer bb new integer 10 ...

Integer型別資料的比較

我們在做integer資料比較的時候,會有意想不到的結果,通過看integer的原始碼,問題迎刃而解。這裡的論述建立在jdk版本是1.8 intger類有個靜態內部類integercache,是用於快取intger物件的。這裡會快取 128 到127的資料。private static class ...