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

  • ETrade Supply

    ETrade Suppl

    23 Temmuz 2011
  • glowpinkstah

    glowpinkstah

    16 Mayıs 2006
  • Mega64

    Mega64

    24 ŞUBAT 2006