Saya tidak yakin tentang JavaScript, tetapi di Java, string mengambil langkah tambahan menuju keabadian, dengan "String Constant Pool". String dapat dibangun dengan string literals ( "foo"
) atau dengan String
konstruktor kelas. String yang dibuat dengan string literal adalah bagian dari String Constant Pool, dan string literal yang sama akan selalu menjadi alamat memori yang sama dari kumpulan tersebut.
Contoh:
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
Di atas, keduanya lit1
dan lit2
dibangun menggunakan string literal yang sama, jadi mereka menunjuk ke alamat memori yang sama; lit1 == lit2
menghasilkan true
, karena mereka adalah objek yang persis sama.
Namun, cons
dibangun menggunakan konstruktor kelas. Meskipun parameternya adalah konstanta string yang sama, konstruktor mengalokasikan memori baru untuk cons
, artinya cons
bukan objek yang sama dengan lit1
dan lit2
, meskipun berisi data yang sama.
Tentu saja, karena ketiga string semuanya berisi data karakter yang sama, menggunakan equals
metode ini akan mengembalikan nilai true.
(Kedua jenis konstruksi senar tidak dapat diubah, tentu saja)