2015-04-26 10 views
5
public class AutoBoxingAndUnBoxing 
{ 
    public static void main(String[] args) 
    { 
     Integer x = 127; 
     Integer y = 127; 
     System.out.println(x == y);//true 

     Integer a = 128; 
     Integer b = 128; 
     System.out.println(a == b);//false 
     System.out.println(a); // prints 128 
    } 
} 

doğrudur ve a==b yanlıştır? Değer (Integer -128 To 127) temel alınıyorsa 'a'-128 yazdı mı?Referans karşılaştırma kullanılarak == operatörü

+2

"Tamsayı" aralığı -2^31 ila 2^31 - 1'dir. -128 ila 127 değildir; Bu bir "byte" aralığı. –

cevap

2

Integer nesnelerini karşılaştırırken, == işleci yalnızca [-128,127] arasındaki sayılar için kullanılabilir. JLS bak: kutulaştırılmıştır değeri p yanlış, doğru ise

, bir bayt veya aralık \ u0000 bir karakter u007f \, veya -128 ve 127 arasında bir int veya kısa numara (dahil), daha sonra r1 ve r2, p'nin iki boks dönüşümünün sonuçları olsun. Her zaman r1 == r2'dir. Eğer Integer#equals kullanmadığınız sürece

o Bahsettiğiniz aralıkta değil kıyaslıyorsun değerleri olduğundan, sonuç false için değerlendirilecektir.

+0

tamam ama 127'den sonraki değer hangisi ise -128 ila 127 aralığında olacak? – kittu

+0

@kittu "değer" ile ne demek istiyorsun? Bu değerler performans sorunları nedeniyle önbelleğe alınır, bu aralığın dışındaki değerler 'equals' kullanılarak karşılaştırılmalıdır. – Maroun

+0

Benim durumumda a == b'nin yanlış olduğunu mu demek istedim? Yanlış yapmak için dahili olarak neler oluyor? :/ – kittu