Rumah > Java > javaTutorial > teks badan

Mengapakah perlu menggunakan `baru` apabila mencipta objek `CaseInsensitiveString` tetapi bukan objek `String`?

Mary-Kate Olsen
Lepaskan: 2024-11-13 08:23:02
asal
766 orang telah melayarinya

Why is it necessary to use `new` when creating a `CaseInsensitiveString` object but not a `String` object?

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

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

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

Dalam senario ini:

  1. 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.
  2. 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!

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