Mencipta Rentetan dalam Java: Kes "String s = new String("bodoh")"
Apabila mencipta rentetan dalam Java, adalah penting untuk memahami tingkah laku kelas String. Tidak seperti kebanyakan kelas lain di Java, literal String mencipta objek String secara automatik tanpa memerlukan kata kunci baharu. Walau bagaimanapun, mencipta objek String baharu menggunakan operator baharu adalah tidak digalakkan secara jelas, kerana ia boleh menyebabkan penggunaan memori yang tidak perlu.
Untuk menggambarkan perkara ini, pertimbangkan kod berikut:
String s = "No longer silly";
Dalam ini kes, literal "Tidak lagi bodoh" diberikan terus kepada pembolehubah s, menyebabkan objek String tunggal dicipta. Walau bagaimanapun, coretan kod berikut:
String s = new String("silly");
mencipta objek String tambahan yang tidak diperlukan. Untuk mengelakkan ini, pengesyoran adalah untuk menggunakan penugasan literal apabila boleh, seperti yang dilihat dalam contoh pertama.
Walau bagaimanapun, mungkin terdapat situasi yang perlu untuk mencipta objek String secara dinamik. Sebagai contoh, pertimbangkan kelas berikut:
public final class CaseInsensitiveString {
private String s;
public CaseInsensitiveString(String s) {
if (s == null) {
throw new NullPointerException();
}
this.s = s;
}
}
Dalam senario ini:
-
Mengapa pernyataan pertama ok? Bukankah sepatutnya CaseInsensitiveString cis = "Polish";?
Pernyataan pertama, CaseInsensitiveString cis = new CaseInsensitiveString("Polish");, adalah betul. Walaupun secara amnya disyorkan untuk menggunakan penetapan literal untuk objek String, peraturan ini tidak digunakan pada objek kelas lain, seperti CaseInsensitiveString. Dalam kes ini, kata kunci baharu diperlukan untuk mencipta tika baharu kelas CaseInsensitiveString.
-
Bagaimanakah cara saya membuat CaseInsensitiveString berkelakuan seperti String supaya pernyataan di atas adalah OK (dengan dan tanpa melanjutkan String)? Apakah yang dimaksudkan dengan String yang menjadikannya OK untuk hanya dapat menyampaikannya secara literal seperti itu? Dari pemahaman saya, tiada konsep "pembina salinan" dalam Java?
Kelas String dalam Java mempunyai gelagat yang unik berbanding dengan kelas lain. Khususnya, literal ditukar secara tersirat kepada objek String, menghapuskan keperluan untuk pembinaan eksplisit. Ini membenarkan pernyataan seperti String s = "Poland"; tanpa menggunakan operator baharu. Tiada konsep "pembina salinan" yang setara di Jawa. Sebaliknya, kelas String menyediakan kebolehubahan dan pembina pratakrif yang menerima jujukan aksara, seperti rentetan literal, untuk mencipta objek String baharu.
Atas ialah kandungan terperinci Mengapakah perlu menggunakan `baru` apabila mencipta objek `CaseInsensitiveString` tetapi bukan objek `String`?. 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