Rumah >Java >javaTutorial >Mengapa Tidak Menggabungkan Rentetan Null dalam Java Membuang NullPointerException?

Mengapa Tidak Menggabungkan Rentetan Null dalam Java Membuang NullPointerException?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-02 18:39:11698semak imbas

Why Doesn't Concatenating a Null String in Java Throw a NullPointerException?

Menggabungkan Rentetan Null dalam Java

Di Java, menggabungkan rentetan nol dengan rentetan lain tidak membuang NullPointerException, seperti yang mungkin jangkakan. Sebaliknya, hasilnya ialah rentetan baharu dengan "null" didahulukan.

Mengapakah ini Gelagat Yang Dijangkakan?

Mengikut Spesifikasi Bahasa Java (JLS ):

"Jika rujukan [kepada null string] adalah nol, ia ditukar kepada rentetan 'null' (empat aksara ASCII n, u, l, l)."

Oleh itu, rentetan nol ditukar secara automatik kepada "null " sebelum penyatuan berlaku.

Bagaimanakah Perlakuan ini Dilaksanakan?

Pengkompil mengoptimumkan penggabungan rentetan untuk meningkatkan prestasi. Ia melakukan ini dengan menggunakan objek StringBuilder untuk mengumpul hasil penggabungan.

Apabila menemui rentetan nol:

  • Jika rentetan nol ialah argumen pertama, ia memanggil String.valueOf( ) untuk menukarnya kepada rentetan bukan nol ("null").
  • Jika rentetan nol bukan yang pertama argumen, ia menambahkan rentetan nol pada StringBuilder dan kemudian memanggil String.valueOf() pada hasilnya.

Contoh

Pertimbangkan kod berikut :

String s = null;
s = s + "hello";
System.out.println(s); // prints "nullhello"

Pengkompil mengoptimumkan kod ini kepada yang berikut setara:

s = new StringBuilder(String.valueOf(s)).append("hello").toString();

Memandangkan s adalah nol, String.valueOf(s) mengembalikan "null", yang kemudiannya dilampirkan pada StringBuilder dan ditukar kepada rentetan.

Atas ialah kandungan terperinci Mengapa Tidak Menggabungkan Rentetan Null dalam Java Membuang NullPointerException?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn