Java String intern() Kullanımı
Java String intern() metodu geriye interne edilmiş string'i döndürür .
Eğer string nesnesi "new" anahtar sözcüğü ile oluşturulmuşsa stringi bellekten döndürmek için kullanılabilir .
String Havuzu'nda heap string nesnesinin tam bir kopyasını oluşturur .
Metod imzası
public String intern()
intern() metoduna neden ihtiyaç duyarız ve nasıl kullanırız ?
Bizler new anahtar sözcüğü ile bir string nesnesi oluşturduğumuzda bu heap bellek olarak adlandırdığımız bölgede yeni bir alan oluşturur . Biz aynı içerikli ne kadar string nesnesi oluşturursak oluşturalım her seferinde heap'ta farklı bir referans adresi atanır . Bunun önüne geçmek için intern() metodunu kullanırız.
Bu metot bize new anahtar kelimesini kullanmadan oluşturduğumuz string'lerin atandığı string havuzunda tam bir kopya oluşturur ve bu sayede string karşılaştırması yaparken equals metoduna ihtiyaç duymayız . Çünkü artık aynı içeriğe sahip diğer string'ler ile aynı referansa sahip olmuş oluyor .
Aşağıdaki kodu inceleyelim :
public static void main(String[] args) {
String str = "Yılmaz Kadan";
String str1 = new String("Yılmaz Kadan");
System.out.println(str1 == str); // false
}
Gördüğünüz gibi str string'i string havuzunda bir kez tanımlanan referansı kullanıyor , ancak new anahtar sözcüğü ile oluşturulan string heap bellekte yeni bir referans taşıdığı için karşılaştırma sonucu false dönüyor .
Kodun düzenlenmiş halini inceleyelim :
public static void main(String[] args) {
String str = "Yılmaz Kadan";
String str1 = new String("Yılmaz Kadan").intern();
System.out.println(str1 == str); // true
}
Artık str1 nesnemiz de string havuzundaki Yılmaz Kadan literalinin aldığı referans adresi aldı . Bunun nedeni tam bir kopyasının string havuzu içerisinde oluşturulmasıydı .