Rumah >Java >javaTutorial >Adakah Mengisytiharkan Rentetan sebagai `akhir` di Jawa Mempengaruhi `==` Perbandingan?

Adakah Mengisytiharkan Rentetan sebagai `akhir` di Jawa Mempengaruhi `==` Perbandingan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-03 06:12:10601semak imbas

Does Declaring Strings as `final` in Java Affect `==` Comparisons?

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:

  • Pengkompil menggantikan operasi penggabungan dengan rentetan sebaris: String concat = "str" ​​"ing"; // menjadi String concat = "rentetan";
  • Tersurat rentetan dimasukkan, bermakna berbilang rujukan kepada nilai rentetan yang sama berkongsi kejadian yang sama. Oleh itu, concat dan "rentetan" literal merujuk kepada objek Rentetan yang sama, menghasilkan kesamaan sebenar.

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!

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