我寫了一個測試代碼來檢查相等性。我檢查了Java文檔,它說BigInteger
是不可變的。檢查靜態工廠方法valueOf
的文檔,它看起來像返回已經緩存的不可變實例。那麼爲什麼當它的緩存實例時==會返回false。BigInteger.ValueOf()返回緩存的對象?
下面是valueOf
在BigInteger
在Java文檔:
返回一個大整數,其值等於指定 長。這種「靜態工廠方法」優先於 (長)構造函數提供,因爲它允許重複使用經常使用的BigIntegers BigIntegers。
下面的代碼進入無限循環。
public static void main(String[] args) {
while(true) {
BigInteger a = BigInteger.valueOf(100);
BigInteger c = BigInteger.valueOf(100);
if (a == c) {
break;
}
}
''==測試爲參考平等, '.equals()'測試值是否相等 – azurefrog
使用'equal()'檢查是否相等。 – Li357
對於原始類型'=='比較值,但對於它比較引用的對象。 – Gendarme