SORU
14 Mart 2012, ÇARŞAMBA


Referans karşılaştırma (==) bazı dizeleri için Java iş olarak ne yapar?

Kodları satır Dize karşılaştırmak için aşağıdaki zorundayım. str1 nesne başvurusu karşılaştırır beri anlaşılabilir str2, eşit değildir. Ama o zaman neden s1 s2 eşittir?

String s1 = "abc";
String s2 = "abc";

String str1 = new String("abc");
String str2 = new String("abc");

if (s1==s2)
    System.out.println("s1==s2");           
else
    System.out.println("s1!=s2");

if (str1==str2)
    System.out.println("str1==str2");           
else
    System.out.println("str1!=str2");

if (s1==str1)
    System.out.println("str1==s1");         
else
    System.out.println("str1!=s1");

Çıkış:

  s1==s2
  str1!=str2
  str1!=s1 

CEVAP
14 Mart 2012, ÇARŞAMBA


Dize sabit havuz aslında s1==s2 için çıktı görünce neden olan aynı nesne altında, onlar bu yüzden her dize hazır önbelleğe alır. Çok pahalı, çok hızlı bir şekilde alabilir aslında literal olarak bildirilen yeni bir dize, bir nesne her zaman yaratarak önlemek için VM optimizasyon! str1==str2 örneği ile açıkça VM yanlış o yüzden yeni string nesneleri oluşturmak için söylüyorsun.

Bir kenara olarak, herhangi bir dize üzerinde intern() yöntemini çağıran, sürekli havuz ve havuz için eklenen bir Dize döndürür.) eklemek için, Değil mutlaka iyi bir fikir bunu yapmak ancak sürece olduğuna emin misin ile ilgili dizeleri bu kesinlikle kullanılacak sabitler, aksi takdirde Mayıs sonuna kadar oluşturma izlemek zor bellek sızdırıyor.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ItZWaffleS420

    ItZWaffleS42

    9 EYLÜL 2011
  • Kurtindo Pop Games

    Kurtindo Pop

    2 HAZİRAN 2013
  • Munchkin the Teddy Bear

    Munchkin the

    30 EYLÜL 2011