SORU
9 Kasım 2009, PAZARTESİ


Neden 128==128 return false ama 127==127 dönüş bu kod doğru mu?

class D {
    public static void main(String args[]) {
        Integer b2=128;
        Integer b3=128;
        System.out.println(b2==b3);
    }
}

Çıkış:

false

class D {
    public static void main(String args[]) {
        Integer b2=127;
        Integer b3=127;
        System.out.println(b2==b3);
    }
}

Çıkış:

true

Not: -128 ile 127 arasında bir Sayı doğrudur.

CEVAP
9 Kasım 2009, PAZARTESİ


Ne zaman bir numarası Java harflerden oluşan bir derleme ve bir Tamsayı (büyük ben) atamak yayar derleme:

Integer b2 =Integer.valueOf(127)

Bu kod satırı da autoboxing kullandığınızda oluşturulur.

valueOf belirli bir sayı olarak uygulanır "" ve döner değerler için aynı örneği daha küçük 128'den. havuza

Java 1.6 kaynak kodundan, çizgi 621:

 public static Integer valueOf(int i) {
    if(i >= -128 && i <= IntegerCache.high)
        return IntegerCache.cache[i   128];
    else
        return new Integer(i);
}

high değerini başka bir değer sistemi özelliği ile yapılandırılabilir.

-Djava.lang.Tamsayı.İntegerCache.yüksek=999

Eğer bu sistem özelliği ile programınızı çalıştırırsanız, doğru çıktı!

Bariz sonuç: asla iki başvuru aynı olmak güveniyor, her zaman .equals() yöntemi ile karşılaştırılması.

b2.equals(b3) true b2,b3 mantıksal olarak eşit tüm değerler için baskı olacak.

Tamsayı önbellek var JLS, section 5.1.7; nesne kimlik değerleri 127 -128 dahil etmek için verilmelidir için de comform için performansı artırmak için değil, unutmayın.

Integer#valueOf(int) ayrıca bu davranış, belgeler:

bu yöntem önemli ölçüde daha iyi verim alan ve sık sık istenen değerleri önbelleğe alarak performansı çok yüksektir. Bu yöntem her zaman önbellek 127, herşey dahil aralığı -128 değerleri ve bu aralığın dışında diğer değerleri önbelleğe olacak.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • JTechTalk

    JTechTalk

    11 Temmuz 2010
  • kindlechatmail

    kindlechatma

    25 AĞUSTOS 2010
  • macpulenta

    macpulenta

    9 EYLÜL 2006