-- Java SE

String Constant Pool

String constant pool, string objelerinin tutulduğu özel bir yerdir.Ne işe yaradığına bakalım.

public class StringConstantPool {
	public static void main(String[] args) {
		String s = "meriç";
		String s2 = "meriç";

		System.out.println(s.equals(s2));
		System.out.println(s == s2);
	}
}

Kodun çıktısı :

true
true

Tek tek ne olduğuna bakalım :

  • JVM’ye başvurulduğunda StringConstantPool sınıfı yüklenir.
  • JVM programdaki bütün String literallerini arar.
  • Öncelikle “meriç” nesnesini referans eden s değişkenini bulur ve “meriç” nesnesi hafızada oluşturulur.
  • Daha sonra aynı “meriç” nesnesini referans eden s2 değişkenini bulur.
  • Hafızada çoktan “meriç” nesnesi olduğu için yenisi oluşturulmaz ve s2’nin de aynı nesneyi referans etmesi sağlanır.

Aşağıda şematik şekilde gösterdim.

stringliteralsreferred1

Aynı işlemleri new operatörünü kullanarak yapalım.

public class StringConstantPool {
	public static void main(String[] args) {
		String s = "meriç";
		String s2 = new String("meriç");
		System.out.println(s.equals(s2));
		System.out.println(s == s2);

	}
}
true
false

İki nesnenin de içeriği aynı olduğu için equals() metodu true değerini dönderir.

== operatörü referans kontrolü yapar,içerik aynı olmasına rağmen farklı “meriç” nesneleri referans edildiği için false değerini dönderir.

stringwithnewkeywor2d

Yorum bırak

Yorum