SORU
2 Ocak 2014, PERŞEMBE


Yöntem Tamsayı karışıklığı.değerini(Dizi)

Bu kod satırları farklı değerler döndürür neden hiçbir fikrim yok:

System.out.println(Integer.valueOf("127")==Integer.valueOf("127"));
System.out.println(Integer.valueOf("128")==Integer.valueOf("128"));
System.out.println(Integer.parseInt("128")==Integer.valueOf("128"));

Çıktı

true
false
true

Neden ilk true ve ikinci bir dönüş false döner? 127 128 arasında bilmediğim farklı bir şey var mı? (Tabii ki İ 127 < 128. O)

Ayrıca, neden üçüncü bir true döner?

of this question ama ben hala true tekrar geri nasıl ve ikinci satır kodu false döner neden almadın cevabı okudum.

CEVAP
2 Ocak 2014, PERŞEMBE


Burada çarpıcı bir fark var.

valueOf değerler -128 ile 127 arasında önbelleğe sahip olabilecek Integer bir nesne dönüyor. Bu yüzden ilk değeri döndürür true - önbellek - ve ikinci değeri döndürür false - 128 değil bir önbellek değeri, yani sen başlarken iki ayrı Integer örnekleri.

ÖNEMLİ NOTInteger#valueOf ile başvurular karşılaştırma ve eğer önbelleği destekler daha büyük bir değer karşılaştırma, olacaktırdeğileğer ayrıştırılmış değerler eşdeğer (örnek: 20**) bile true, değerlendirir. Sanagerekirequals() kullanın.

parseInt int bir ilkel dönüyor. Butrue - 128 == 128 döner üçüncü değeri değerlendirilir, ve tabii ki, 26 ** olmasıdır.

Şimdi, epey üçüncü sonuç true etmek olur:

  • An unboxing conversion occurs kullandığınız denklik operatörü açısından ve veri türleri - yani, int Integer. Tabii ki sağ taraftaki valueOf 30 *bir elde ediyorsun.

  • Dönüşüm sonra int iki ilkel değerler ile karıştırıyorsunuz. Karşılaştırma 128 128 karşılaştırma rüzgar çok ilkel ile ilgili olarak, beklediğiniz gibi olur.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BrandonHarrisWalker

    BrandonHarri

    27 Kasım 2006
  • o0oCyrusViruso0o

    o0oCyrusViru

    11 Mart 2008
  • optionalinfo

    optionalinfo

    29 EKİM 2005