Permulaan String di Java

1. Pengenalan

Java String adalah salah satu kelas yang paling penting dan kami telah merangkumi banyak aspeknya dalam siri tutorial berkaitan String kami .

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

2. Penciptaan

Pertama sekali, kita harus ingat bagaimana String dibuat di Java.

Kita boleh menggunakan kata kunci baru atau sintaks literal:

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

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

3. Deklarasi Rentetan Sahaja

Pertama, mari kita nyatakan String , tanpa memberikan nilai secara jelas.

Kita boleh melakukan ini secara tempatan atau sebagai pemboleh ubah ahli:

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

Seperti yang kita lihat, jika kita cuba menggunakan localVarString sebelum memberikannya nilai, kita akan mendapat ralat penyusunan. Sebaliknya, konsol akan menunjukkan " null" untuk nilai fieldString .

Lihat, pemboleh ubah anggota diinisialisasi dengan nilai lalai ketika kelas dibina, tidak ada dalam kes String . Tetapi, kita harus memulakan pemboleh ubah tempatan sendiri.

Sekiranya kita memberikan nilai nol tempatan LocalVarString , kita akan melihat bahawa kedua-duanya kini sama:

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

4. Permulaan String Menggunakan Literal

Sekarang mari kita buat dua String menggunakan literal yang sama:

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

Kami akan mengesahkan bahawa hanya satu objek yang dibuat dengan membandingkan rujukan:

assertTrue(literalOne == literalTwo);

Sebab ini menunjukkan bahawa String disimpan di kolam. literalOne menambahkan String "baeldung" ke kolam renang, dan literalDua menggunakannya kembali.

5. Permulaan String Menggunakan baru

Kita akan melihat beberapa tingkah laku yang berbeza, jika kita menggunakan kata kunci baru .

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

Walaupun nilai kedua-dua String akan sama seperti sebelumnya, kita akan mempunyai objek yang berbeza kali ini:

assertFalse(newStringOne == newStringTwo);

6. Tali Kosong s

Mari buat tiga String kosong sekarang :

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

Seperti yang kita tahu, yang emptyLiteral akan ditambah kepada String renang, manakala dua yang lain pergi terus ke timbunan itu.

Walaupun ini bukan objek yang sama, semuanya akan mempunyai nilai yang sama:

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

7. Nilai batal

Akhirnya, mari kita lihat bagaimana String sifar berkelakuan

Mari nyatakan dan mulakan String nol :

String nullValue = null;

Sekiranya kita mencetak nullValue , kita akan melihat perkataan "null", seperti yang kita lihat sebelumnya. Dan, jika kami cuba menggunakan kaedah apa pun pada nullValue, kami akan mendapat NullPointerException, seperti yang diharapkan.

Tetapi, mengapa "null" dicetak? Apa itu nol sebenarnya?

Nah, spesifikasi JVM mengatakan bahawa null adalah nilai lalai untuk semua rujukan, jadi tidak terikat secara khusus dengan String . Dan sebenarnya, spesifikasi tidak mewajibkan pengekodan nilai konkrit untuk nol .

Jadi, dari mana "null" berasal untuk mencetak String ?

Sekiranya 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 mendapat jawapan:

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

Dan, jelas, itulah alasan untuk "null".

8. Kesimpulannya

Dalam artikel ini, kami meneroka inisialisasi String . Kami menjelaskan perbezaan antara pengisytiharan dan inisialisasi. Kami juga menyentuh mengenai penggunaan sintaks baru dan menggunakan literal.

Akhirnya, kami melihat apa artinya menetapkan nilai nol pada String , bagaimana nilai nol ditunjukkan dalam memori, dan bagaimana rupanya ketika kami mencetaknya.

Semua sampel kod yang digunakan dalam artikel boleh didapati di Github.