SORU
3 EYLÜL 2010, Cuma


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
3 EYLÜL 2010, Cuma


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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Official Android Tips

    Official And

    23 EYLÜL 2009
  • KIT KAT

    KIT KAT

    3 EKİM 2005
  • pain975

    pain975

    27 NİSAN 2008