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 Stringkonstruktor 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 lit1dan lit2dibangun menggunakan string literal yang sama, jadi mereka menunjuk ke alamat memori yang sama; lit1 == lit2menghasilkan true, karena mereka adalah objek yang persis sama.
Namun, consdibangun menggunakan konstruktor kelas. Meskipun parameternya adalah konstanta string yang sama, konstruktor mengalokasikan memori baru untuk cons, artinya consbukan objek yang sama dengan lit1dan lit2, meskipun berisi data yang sama.
Tentu saja, karena ketiga string semuanya berisi data karakter yang sama, menggunakan equalsmetode ini akan mengembalikan nilai true.
(Kedua jenis konstruksi senar tidak dapat diubah, tentu saja)