Membandingkan Rentetan dengan == Diisytiharkan sebagai Akhir dalam Java
Apabila membandingkan rentetan menggunakan operator kesamaan (==) di Java, hasilnya boleh berbeza berdasarkan sama ada rentetan diisytiharkan sebagai muktamad.
Akhir Rentetan
Apabila rentetan diisytiharkan sebagai muktamad, pengkompil mengoptimumkannya dengan menyelaraskan nilai sebagai ungkapan pemalar masa kompilasi. Ini bermakna nilai rentetan ditentukan pada masa penyusunan dan disimpan terus dalam kod bait, bukannya diperuntukkan secara dinamik pada masa jalan.
Kelakuan Rentetan Akhir
Dalam kes rentetan diisytiharkan sebagai muktamad, ungkapan perbandingan concat == "rentetan" kembali benar kerana:
Rentetan Bukan Akhir
Sebaliknya, bukan Rentetan akhir tidak diselaraskan dan diperuntukkan secara dinamik pada masa jalan. Operasi penggabungan mencipta objek String baharu, yang berbeza daripada "rentetan" literal dalam ingatan. Akibatnya, ungkapan perbandingan concat == "rentetan" mengembalikan palsu.
Pengesahan
Untuk mengesahkan tingkah laku ini, seseorang boleh membandingkan kod bait bukan muktamad dan muktamad versi rentetan:
Bukan Akhir Versi:
// stores str and ing in separate variables and uses StringBuilder for concatenation
Versi Akhir:
// directly inlines the final variable to create String string at compile time
Oleh itu, mengisytiharkan rentetan sebagai muktamad dan memulakannya dengan ungkapan pemalar masa kompilasi boleh menjejaskan hasil perbandingan kesamaan menggunakan == disebabkan oleh sebaris dan selitan literal rentetan.
Atas ialah kandungan terperinci Adakah Mengisytiharkan Rentetan sebagai `akhir` di Jawa Mempengaruhi `==` Perbandingan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!