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

  • Bryan Smith

    Bryan Smith

    12 Mart 2006
  • EEVblog

    EEVblog

    4 NİSAN 2009
  • Mismag822 - The Card Trick Teacher

    Mismag822 -

    18 EKİM 2008