Neden 128==128 return false ama 127==127 dönüş bu kod doğru mu?
class D {
public static void main(String args[]) {
Integer b2=128;
Integer b3=128;
System.out.println(b2==b3);
}
}
Çıkış:
false
class D {
public static void main(String args[]) {
Integer b2=127;
Integer b3=127;
System.out.println(b2==b3);
}
}
Çıkış:
true
Not: -128 ile 127 arasında bir Sayı doğrudur.
CEVAP
Ne zaman bir numarası Java harflerden oluşan bir derleme ve bir Tamsayı (büyük ben) atamak yayar derleme:
Integer b2 =Integer.valueOf(127)
Bu kod satırı da autoboxing kullandığınızda oluşturulur.
valueOf
belirli bir sayı olarak uygulanır "" ve döner değerler için aynı örneği daha küçük 128'den. havuza
Java 1.6 kaynak kodundan, çizgi 621:
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i 128];
else
return new Integer(i);
}
high
değerini başka bir değer sistemi özelliği ile yapılandırılabilir.
-Djava.lang.Tamsayı.İntegerCache.yüksek=999
Eğer bu sistem özelliği ile programınızı çalıştırırsanız, doğru çıktı!
Bariz sonuç: asla iki başvuru aynı olmak güveniyor, her zaman .equals()
yöntemi ile karşılaştırılması.
b2.equals(b3)
true b2,b3 mantıksal olarak eşit tüm değerler için baskı olacak.
Tamsayı önbellek var JLS, section 5.1.7; nesne kimlik değerleri 127 -128 dahil etmek için verilmelidir için de comform için performansı artırmak için değil, unutmayın.
Integer#valueOf(int) ayrıca bu davranış, belgeler:
bu yöntem önemli ölçüde daha iyi verim alan ve sık sık istenen değerleri önbelleğe alarak performansı çok yüksektir. Bu yöntem her zaman önbellek 127, herşey dahil aralığı -128 değerleri ve bu aralığın dışında diğer değerleri önbelleğe olacak.
Neden "not(True) [False] Doğru mu...
Neden (0 < 5 < 3) doğru mu?dönüş...
Neden Çift yapar.==Çift NaN.Return fal...
Neden "a".(&;&Quot quot;) St...
Neden İnetAddress.IP adresi ping varke...