Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

เหตุใดคลาสสตริงจึงไม่เปลี่ยนรูปหรือเป็นขั้นสุดท้ายใน Java


สตริงนั้นเปลี่ยนไม่ได้หมายความว่าเราไม่สามารถเปลี่ยนวัตถุได้ แต่เราสามารถเปลี่ยนการอ้างอิงไปยังวัตถุได้ สตริงนี้ทำขึ้นขั้นสุดท้ายเพื่อไม่ให้ผู้อื่นขยายและทำลายความไม่เปลี่ยนรูปของสตริง

  • การรักษาความปลอดภัย โดยทั่วไป พารามิเตอร์จะแสดงเป็นสตริงในการเชื่อมต่อเครือข่าย, URL การเชื่อมต่อฐานข้อมูล, ชื่อผู้ใช้/รหัสผ่าน ฯลฯ หากไม่สามารถเปลี่ยนแปลงได้ พารามิเตอร์เหล่านี้สามารถเปลี่ยนแปลงได้อย่างง่ายดาย
  • การซิงโครไนซ์และการทำงานพร้อมกัน ทำให้สตริงไม่เปลี่ยนรูปโดยอัตโนมัติทำให้เธรดปลอดภัยจึงแก้ปัญหาการซิงโครไนซ์ได้
  • แคช เมื่อคอมไพเลอร์ปรับออบเจ็กต์ String ให้เหมาะสม ดูเหมือนว่าถ้าสองอ็อบเจ็กต์มีค่าเท่ากัน (a =" test" และ b =" test") ดังนั้นเราจึงต้องการออบเจ็กต์สตริงเพียงอันเดียว (สำหรับทั้ง a และ b ทั้งสองจะชี้ ไปยังวัตถุเดียวกัน)
  • กำลังโหลดคลาส สตริงถูกใช้เป็นอาร์กิวเมนต์สำหรับการโหลดคลาส หากเปลี่ยนแปลงได้ อาจส่งผลให้มีการโหลดคลาสที่ไม่ถูกต้อง (เนื่องจากอ็อบเจ็กต์ที่เปลี่ยนแปลงได้จะเปลี่ยนสถานะ)

ตัวอย่าง:

<ก่อน> คลาสสาธารณะ StringImmutableDemo { โมฆะสาธารณะหลัก (สตริง [] args) { สตริง st1 ="บทช่วยสอน"; สตริง st2 ="จุด"; System.out.println("The hascode ของ st1 =" + st1.hashCode()); System.out.println("The hascode ของ st2 =" + st2.hashCode()); st1 =st1 + st2; System.out.println("Hashcode หลังจาก st1 มีการเปลี่ยนแปลง:"+ st1.hashCode()); }}

ผลลัพธ์:

 hascode ของ st1 =-594386763The hascode ของ st2 =77292912The Hashcode หลังจาก st1 มีการเปลี่ยนแปลง:962735579