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

Mengapa Tidak Menggabungkan Rentetan Null dalam Java Membuang NullPointerException?

Mary-Kate Olsen
Lepaskan: 2024-12-02 18:39:11
asal
696 orang telah melayarinya

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"
Salin selepas log masuk

Pengkompil mengoptimumkan kod ini kepada yang berikut setara:

s = new StringBuilder(String.valueOf(s)).append("hello").toString();
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan