java中整數的相等比較

2021-08-07 16:09:51 字數 1897 閱讀 2790

如果比較兩個數值相等的integer型別的整數,你可能會發現,用「==」比較(首先你必須明確「==」比較的是位址),有的時候返回true,而有的時候,返回false。比如:

integer i = 128;

integer j = 128;

system.out.println(i == j);//返回false

integer m = 127;

integer n = 127;

system.out.println(m == n);//返回true

為什麼兩個相差1的數,比較的結果卻不一樣呢。看一下原始碼

public static integer valueof(int i)

integer i = 128;這種方式賦值,會呼叫valueof方法。我們發現這裡做了一些關於integercache的操作。integercache原始碼:

private static class integercache 

high = h;

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

int j = low;

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

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

}private integercache() {}

}

原來integer把-128到127(可調)的整數都提前例項化了, 所以你不管建立多少個這個範圍內的integer都是同乙個物件。

那麼,如何比較兩個integer型別是否相等呢,你肯定會想到equals,沒錯,就是equals,看下equals原始碼:

public boolean equals(object obj) 

return false;

}

value值是int型別:

private final int value;

通過原始碼得知,是獲取integer的基本型別值來用==比較了。

所以,我們也可以這樣,通過integer.intvalue()獲取int值來直接比較。

其實,乙個int型別和integer直接「==」比較也是沒有問題的:

integer i = 128;

int j = 128;

system.out.println(i == j);//返回true

原因是integer型別會自動拆箱變為int型別來進行比較。

綜上:如果你用兩個integer型別的整數做相等比較

1.如果integer型別的兩個數相等,如果範圍在-128~127(預設),那麼用「==」返回true,其餘的範會false。

2.兩個基本型別int進行相等比較,直接用==即可。

3.乙個基本型別int和乙個包裝型別integer比較,用==也可,比較時候,integer型別做了拆箱操作。

4.integer型別比較大小,要麼呼叫integer.intvalue()轉為基本型別用「==」比較,要麼直接用equals比較。

擴充套件:long和short型別也做了相同的處理,只不過最大值是不可調的。

public static long valueof(long l) 

return new long(l);

}

public static short valueof(short s) 

return new short(s);

}

C 相等比較

c 中的物件都繼承自system.object物件,分為引用型別和值型別兩種,所以物件的相等比較而言就分兩種,一種是比較引用,一種是比較值。system.object預設提供了三個方法來進行物件的相等比較 靜態的referenceequals equals 靜態方法 equals 虛方法 子類可以去...

物件相等比較

對於string型別而言,一般用 或者equales做相等比較,前者比較字串的引用,後者比較字串的值。字串常量的值儲存於常量池中,只要值相同,那麼引用的就是同乙個字串常量,也就是說,和equals效果一樣。字串物件儲存於堆中,不同的物件在堆上的記憶體位址是不一樣的。因此,建立兩個值相等的string...

C 之相等比較(常規比較)

c 之相等比較 c 中的物件都繼承自system.object物件,分為引用型別和值型別兩種,所以物件的相等比較而言就分兩種,一種是比較引用,一種是比較值。system.object預設提供了三個方法來進行物件的相等比較 靜態的referenceequals 和equals 的兩個版本,加上 運算子...