Inisialisasi String di Java

1. Perkenalan

Java String adalah salah satu kelas yang paling penting dan kita telah membahas banyak aspeknya dalam rangkaian tutorial terkait String .

Dalam tutorial ini, kita akan fokus pada inisialisasi String di Java.

2. Penciptaan

Pertama-tama, kita harus ingat bagaimana String dibuat di Java.

Kita dapat menggunakan kata kunci baru atau sintaks literal:

String usingNew = new String("baeldung"); String usingLiteral = "baeldung";

Dan, penting juga bagi kita untuk memahami bagaimana String dikelola dalam kumpulan khusus.

3. Hanya Deklarasi String

Pertama, mari kita deklarasikan String , tanpa menetapkan nilai secara eksplisit.

Kami dapat melakukan ini secara lokal atau sebagai variabel anggota:

public class StringInitialization { String fieldString; void printDeclaredOnlyString() { String localVarString; // System.out.println(localVarString); -> compilation error System.out.println(fieldString); } }

Seperti yang bisa kita lihat, jika kita mencoba menggunakan localVarString sebelum memberinya nilai, kita akan mendapatkan kesalahan kompilasi. Di sisi lain, konsol akan menampilkan " null" untuk nilai fieldString .

Lihat, variabel anggota diinisialisasi dengan nilai default ketika kelas dibangun, null dalam kasus String . Tapi, kita harus menginisialisasi variabel lokal sendiri.

Jika kita memberi localVarString nilai null , kita akan melihat bahwa keduanya sekarang sama:

String localVarString = null; assertEquals(fieldString, localVarString);

4. Inisialisasi String Menggunakan Literal

Sekarang mari buat dua String menggunakan literal yang sama:

String literalOne = "Baeldung"; String literalTwo = "Baeldung";

Kami akan mengonfirmasi bahwa hanya satu objek yang dibuat dengan membandingkan referensi:

assertTrue(literalOne == literalTwo);

Alasan untuk ini kembali ke fakta bahwa String disimpan dalam sebuah pool. literalOne menambahkan String "baeldung" ke pool, dan literalTwo menggunakannya kembali.

5. Inisialisasi String Menggunakan new

Kami akan melihat beberapa perilaku yang berbeda, jika kami menggunakan kata kunci baru .

String newStringOne = new String("Baeldung"); String newStringTwo = new String("Baeldung");

Meskipun nilai kedua String akan sama seperti sebelumnya, kita harus ke objek yang berbeda kali ini:

assertFalse(newStringOne == newStringTwo);

6. String Kosong s

Sekarang mari buat tiga String kosong :

String emptyLiteral = ""; String emptyNewString = new String(""); String emptyNewStringTwo = new String();

Seperti yang kita tahu sekarang, yang emptyLiteral akan ditambahkan ke String kolam renang, sementara dua lainnya pergi langsung ke tumpukan.

Meskipun ini bukan objek yang sama, semuanya akan memiliki nilai yang sama:

assertFalse(emptyLiteral == emptyNewString) assertFalse(emptyLiteral == emptyNewStringTwo) assertFalse(emptyNewString == emptyNewStringTwo) assertEquals(emptyLiteral, emptyNewString); assertEquals(emptyNewString, emptyNewStringTwo);

7. Nilai null

Terakhir, mari kita lihat bagaimana perilaku String null .

Mari mendeklarasikan dan menginisialisasi String null :

String nullValue = null;

Jika kita mencetak nullValue , kita akan melihat kata "null", seperti yang kita lihat sebelumnya. Dan, jika kami mencoba memanggil metode apa pun pada nullValue, kami akan mendapatkan NullPointerException, seperti yang diharapkan.

Tapi, mengapa "null" dicetak? Apa sebenarnya null ?

Nah, spesifikasi JVM mengatakan bahwa null adalah nilai default untuk semua referensi, jadi tidak secara spesifik terkait dengan String . Dan sebenarnya, spesifikasi tidak mengharuskan pengkodean nilai konkret untuk null .

Jadi, darimana asal "null" untuk mencetak String ?

Jika kita melihat implementasi PrintStream # println , kita akan melihatnya memanggil String # valueOf :

public void println(Object x) { String s = String.valueOf(x); synchronized (this) { print(s); newLine(); } }

Dan, jika kita melihat String # valueOf, kita mendapatkan jawaban kita:

public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); }

Dan, jelas, itulah alasan untuk "null".

8. Kesimpulan

Pada artikel ini, kami menjelajahi inisialisasi String . Kami menjelaskan perbedaan antara deklarasi dan inisialisasi. Kami juga menyentuh penggunaan new dan menggunakan sintaks literal.

Akhirnya, kami melihat apa artinya menetapkan nilai null ke String , bagaimana nilai null direpresentasikan dalam memori, dan tampilannya saat kami mencetaknya.

Semua contoh kode yang digunakan dalam artikel tersedia di Github.