Java 1.5 itibariyle hemen hemen alışverişini can Integer
ile int
birçok durumda.
Ancak, kodumda beni biraz şaşırtan potansiyel bir kusur buldum.
Aşağıdaki kod:
Integer cdiCt = ...;
Integer cdsCt = ...;
...
if (cdiCt != null && cdsCt != null && cdiCt != cdsCt)
mismatch = true;
hangi şartlar altında belirleyemesem de, değerler eşit olduğunda yanlış eşleşmemesi gibi görünüyordu. Eclipse'de bir kesme noktası belirledim ve Integer
değerlerin her ikisi de 137 olduğunu gördüm ve boole ifadesini inceledim ve bunun yanlış olduğunu söyledi, ancak üzerine bastığımda uyumsuzluğu true olarak ayarlıyordu.
Şartlı şunun değiştirilmesi:
if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt))
sorunu çözdü.
Bunun neden olduğuna kimse ışık tutabilir mi? Şimdiye kadar, localhost'umdaki davranışı sadece kendi bilgisayarımda gördüm. Bu özel durumda, kod başarılı bir şekilde yaklaşık 20 karşılaştırmayı geçmiş, ancak 2'de başarısız olmuştur. Sorun sürekli olarak yeniden oluşturulabilirdi.
Yaygın bir sorunsa, diğer ortamlarımızda (dev ve test) hatalara neden olmalı, ancak şu ana kadar bu kod snippet'ini yürüten yüzlerce testten sonra kimse sorunu bildirmedi.
==
İki Integer
değeri karşılaştırmak için hala meşru değil mi?
Aşağıdaki tüm iyi cevaplara ek olarak, aşağıdaki stackoverflow bağlantısı biraz ek bilgiye sahiptir. Aslında asıl sorumu yanıtlardı, ama sorumda otomatik bokstan bahsetmediğim için, seçilen önerilerde görünmedi: