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

ทำไมคลาส String จึงเป็น immutable หรือ final ใน Java

String เป็น immutable หมายความว่าเราไม่สามารถเปลี่ยนแปลงออบเจ็กต์เองได้ แต่เราสามารถเปลี่ยนการอ้างอิงไปยังออบเจ็กต์ได้ String ถูกทำเป็น final เพื่อไม่ให้ผู้อื่นขยายมันและทำลายความ immutable ของมัน

  • ความปลอดภัย (Security) พารามิเตอร์มักถูกแทนด้วย String ในการเชื่อมต่อเครือข่าย URL การเชื่อมต่อฐานข้อมูล ชื่อผู้ใช้/รหัสผ่าน เป็นต้น หากมันเป็น mutable พารามิเตอร์เหล่านี้อาจถูกเปลี่ยนแปลงได้ง่าย
  • การซิงโครไนซ์และความขนาน (Synchronization and Concurrency) การทำให้ String เป็น immutable ทำให้มันเป็น thread-safe โดยอัตโนมัติ ทำให้แก้ปัญหาการซิงโครไนซ์ได้
  • การแคช (Caching) เมื่อคอมไพเลอร์เพิ่มประสิทธิภาพออบเจ็กต์ String ของเรา ดูเหมือนว่าหากออบเจ็กต์สองตัวมีค่าเดียวกัน (a =" test" และ b =" test") เราจึงต้องการออบเจ็กต์ String เพียงตัวเดียว (สำหรับ a และ b ทั้งคู่ ตัวชี้ทั้งสองจะชี้ไปที่ออบเจ็กต์เดียวกัน)
  • การโหลดคลาส (Class loading) String ถูกใช้เป็นอาร์กิวเมนต์สำหรับการโหลดคลาส หากเป็น mutable อาจทำให้โหลดคลาสผิด (เพราะออบเจ็กต์ mutable เปลี่ยนสถานะได้)

ตัวอย่าง:

public class StringImmutableDemo {    public static void main(String[] args) {       String st1 = "Tutorials";       String st2 = "Point";       System.out.println("The hascode of st1 = " + st1.hashCode());       System.out.println("The hascode of st2 = " + st2.hashCode());       st1 = st1 + st2;       System.out.println("The Hashcode after st1 is changed : "+ st1.hashCode());    } }

ผลลัพธ์:

The hascode of st1 = -594386763 The hascode of st2 = 77292912 The Hashcode after st1 is changed : 962735579