สตริงเป็นคลาสที่ไม่เปลี่ยนรูปแบบ และไม่สามารถแก้ไขได้หลังจากสร้างแล้ว แต่จะอ้างอิงถึงวัตถุอื่นอย่างแน่นอน มีประโยชน์มากในสภาพแวดล้อมแบบมัลติเธรดเนื่องจากหลายเธรดไม่สามารถเปลี่ยนสถานะของอ็อบเจ็กต์ได้ ดังนั้นอ็อบเจ็กต์ที่ไม่เปลี่ยนรูปจึงปลอดภัยสำหรับเธรด
บัฟเฟอร์สตริงเป็นคลาสที่เปลี่ยนแปลงได้ซึ่งสามารถใช้เพื่อดำเนินการกับวัตถุสตริงเช่นการย้อนกลับของสตริง การต่อสตริงและอื่น ๆ เราสามารถแก้ไขสตริงโดยไม่ต้องสร้างวัตถุใหม่ของสตริง บัฟเฟอร์สตริงยังปลอดภัยสำหรับเธรด
นอกจากนี้ ตัวดำเนินการ string concat + ภายในยังใช้คลาส StringBuffer หรือ StringBuilder ด้านล่างนี้คือข้อแตกต่าง
ซีเนียร์ เลขที่ | คีย์ | สตริง | StringBuffer |
---|---|---|---|
1 | พื้นฐาน | สตริงเป็นคลาสที่ไม่เปลี่ยนรูปแบบและไม่สามารถแก้ไขได้หลังจากสร้างแล้ว | สตริงบัฟเฟอร์เป็นคลาสที่เปลี่ยนแปลงได้ซึ่งสามารถใช้เพื่อดำเนินการกับอ็อบเจกต์สตริง |
2 | วิธีการ | วิธีการไม่ซิงโครไนซ์ | วิธีการทั้งหมดจะถูกซิงโครไนซ์ในคลาสนี้ |
3 | ประสิทธิภาพ | มันเร็ว | ไม่สามารถเข้าถึงหลายเธรดพร้อมกันได้จึงช้า |
4. | พื้นที่หน่วยความจำ | ถ้าสตริงถูกสร้างขึ้นโดยใช้ตัวสร้างหรือเมธอด จากนั้นสตริงเหล่านั้นจะถูกเก็บไว้ใน Heap Memory เช่นเดียวกับ SringConstantPool | ฮีปสเปซ |
ตัวอย่างสตริง
public class Main { public static void main(String args[]) { String s1 = "Hello Tutorials Point"; String upperCase = s1.toUpperCase(); System.out.println(upperCase); } }
ตัวอย่าง StringBuffer
public class StringBufferExample{ public static void main(String[] args){ StringBuffer buffer=new StringBuffer("Hi"); buffer.append("Java 8"); System.out.println("StringBufferExample" +buffer); } }