JavaScript konusunda emin değilim, ancak Java'da dizeler "Dize Sabit Havuzu" ile değişmezliğe ek bir adım atıyor. Dizeler, dize değişmezleri ( "foo"
) veya bir String
sınıf yapıcısı ile oluşturulabilir. Dize değişmezleri ile oluşturulan dizeler, Dize Sabit Havuzunun bir parçasıdır ve aynı dize değişmezi her zaman havuzdaki aynı bellek adresi olacaktır.
Misal:
String lit1 = "foo";
String lit2 = "foo";
String cons = new String("foo");
System.out.println(lit1 == lit2); // true
System.out.println(lit1 == cons); // false
System.out.println(lit1.equals(cons)); // true
Yukarıdaki her iki lit1
ve lit2
aynı dize kullanarak inşa edilir onlar böylece aynı bellek adresinde ediyoruz işaret; lit1 == lit2
sonuçlanırtrue
, çünkü bunlar tamamen aynı nesnelerdir.
Ancak, cons
sınıf yapıcısı kullanılarak oluşturulur. Parametre aynı dize sabiti olmasına rağmen, kurucu için yeni bellek ayırır; bu cons
, aynı verileri içermesine rağmen ve ile cons
aynı nesne değildir .lit1
lit2
Elbette, üç dizenin tümü aynı karakter verilerini içerdiğinden, equals
yöntemi kullanmak doğru döndürür.
(Elbette her iki tür ip yapımı da değişmezdir)