Rumah  >  Artikel  >  Java  >  Mengapa Java Tidak Membuang NullPointerException Apabila Menggabungkan Rentetan Null?

Mengapa Java Tidak Membuang NullPointerException Apabila Menggabungkan Rentetan Null?

Susan Sarandon
Susan Sarandonasal
2024-11-26 18:56:10592semak imbas

Why Doesn't Java Throw a NullPointerException When Concatenating Null Strings?

Mengapa Null Strings Bercantum dalam Java

Di Java, adalah mungkin untuk menggabungkan rentetan null tanpa menemui NullPointerException. Tingkah laku ini berlaku kerana cara Mesin Maya Java (JVM) mengendalikan rujukan nol:

Mengendalikan Rujukan Null

Mengikut Spesifikasi Bahasa Java (JLS), jika rujukan adalah nol, ia ditukar kepada rentetan "null" apabila melakukan penggabungan rentetan. Penukaran ini dilakukan secara automatik oleh JVM. Akibatnya, ungkapan s "hello" tidak menimbulkan pengecualian tetapi sebaliknya menilai kepada rentetan "nullhello", walaupun s pada mulanya batal.

Butiran Pelaksanaan

JVM mengendalikan rujukan nol semasa penggabungan dengan menjana bytecode yang menggunakan kelas StringBuilder. Pengkompil secara berkesan menterjemahkan operasi penggabungan kepada kod yang memulakan objek StringBuilder, menambahkan rentetan bukan nol ("hello" dalam kes ini) dan menukar hasilnya kepada objek Rentetan.

Kod di bawah menunjukkan bytecode setara yang pengkompil menjana:

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

Kod ini menggunakan kelas StringBuilder untuk mengendalikan rujukan null dengan selamat dan gabungkan rentetan.

Pertimbangan Pengoptimuman

Atas sebab prestasi, JVM boleh mengoptimumkan gabungan rentetan berulang dengan menggunakan kelas StringBuffer atau teknik yang serupa. Pengoptimuman ini mengelakkan mencipta objek Rentetan perantaraan yang tidak diperlukan semasa penilaian. Walau bagaimanapun, pelaksanaan tepat pengoptimuman ini mungkin berbeza-beza merentas penyusun yang berbeza.

Atas ialah kandungan terperinci Mengapa Java Tidak Membuang NullPointerException Apabila Menggabungkan Rentetan Null?. 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