Java: =vs eşittir Tamsayı=
Java 1.5, hemen hemen birçok durumda int
Integer
değiş tokuş edebilir.
Ancak, beni biraz şaşırttı, benim kod olası bir kusur buldum.
Aşağıdaki kodu:
Integer cdiCt = ...;
Integer cdsCt = ...;
...
if (cdiCt != null && cdsCt != null && cdiCt != cdsCt)
mismatch = true;
hangi şartlar altında belirlemek edemesem de, değerleri eşit olduğunda yanlış ayar uyuşmazlığı olduğu ortaya çıktı. Ben set kesme noktası olarak Tutulması ve gördüğüm Integer
değerleri her ikisi de 137, ve ben kontrol boolean ifade ve demiş ki; " yanlış, ama ne zaman bastım üzerine, ayar uyuşmazlığı için de geçerlidir.
İçin Koşullu değişen:
if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt))
sorun düzeltildi.
Kimse bunun neden üzerinde biraz ışık tutabilir? Şimdiye kadar, sadece kendi bilgisayarımda benim localhost üzerinde davranış görmedim. Bu durumda, kodu başarıyla 20 karşılaştırmalar geçemedim ama 2 başarısız oldu. Sorun sürekli tekrarlanabilir.
Eğer bir yaygın sorun, neden hataları bizim diğer ortamları (dev ve test), ama şu ana kadar hiç bir haber alamadık sorun sonra yüzlerce testleri yapılarak bu kod parçacığını.
Hala ==
Integer
iki değeri karşılaştırmak için kullanımı yasal değil mi?
Tüm iyi cevaplar aşağıda ek olarak, aşağıdaki stackoverflow link ek bilgi biraz var. Aslında ilk soruma cevap olurdu, ama benim söz konusu autoboxing bahsetmedim çünkü, seçilen öneri gelmedi:
Why can't the compiler/JVM just make autoboxing “just work”?
CEVAP
JVM Tamsayı değerleri önbelleğe alma. == sadece -128 ile 127 arasında bir sayı için çalışıyor http://www.owasp.org/index.php/Java_gotchas#Immutable_Objects_.2F_Wrapper_Class_Caching
Rastgele oluşturuluyor Java ile bir ar...
Java int String - İnteger.(ben) vs yen...
Liste dönüştürmek için nasıl<Tamsay...
== Eşittir vs Java() karışıklık...
Bir int arasındaki fark ve Java ve C T...