ใน Java, String, StringBuffer และ StringBuilder มักจะใช้คลาสสตริงในการเขียนโปรแกรม ความแตกต่างระหว่างพวกเขาก็เป็นคำถามที่มักถูกถามในการสัมภาษณ์ ตอนนี้สรุปและดูว่าพวกเขาแตกต่างกันอย่างไรและเหมือนกัน
1. ตัวแปรและไม่เปลี่ยนรูป
สตริงคลาสใช้อาร์เรย์อักขระเพื่อบันทึกสตริงดังต่อไปนี้: เนื่องจากมีตัวดัดแปลง "สุดท้าย" คุณสามารถรู้ได้ว่าวัตถุสตริงไม่เปลี่ยนรูป
ค่าถ่านสุดท้ายส่วนตัว [];
ทั้ง StringBuilder และ StringBuffer ได้รับการสืบทอดมาจากคลาส AbstractStringBuilder ใน AbstractStringBuilder จะใช้อาร์เรย์อักขระเพื่อบันทึกสตริง ดังต่อไปนี้จะเห็นได้ว่าวัตถุทั้งสองนั้นไม่แน่นอน
ถ่าน [] ค่า;
2. มันมีหลายเธรดและปลอดภัยหรือไม่?
วัตถุในสตริงนั้นไม่เปลี่ยนรูปดังนั้นจึงสามารถเข้าใจได้ว่าเป็นค่าคงที่ซึ่งเห็นได้ชัดว่ามีความปลอดภัย
AbstractStringBuilder เป็นคลาสแม่สาธารณะของ StringBuilder และ StringBuffer ซึ่งกำหนดการดำเนินการพื้นฐานบางอย่างของสตริงเช่น ExpandCapacity, ผนวก, แทรก, ดัชนีและวิธีการสาธารณะอื่น ๆ
StringBuffer ได้เพิ่มการล็อคการซิงโครไนซ์ลงในวิธีการหรือล็อคการซิงโครไนซ์ไปยังวิธีที่เรียกว่าดังนั้นจึงเป็นเธรดที่ปลอดภัย ดูซอร์สโค้ดต่อไปนี้:
Public Synchronized StringBuffer Reverse () {super.Reverse (); return this;} INT ดัชนี int สาธารณะ (string str) {return indexof (str,); // มีดัชนี int ที่ซิงโครไนซ์สาธารณะ (String str, int fromindex) วิธี} StringBuilder ไม่ได้เพิ่มการเชื่อมโยงการซิงโครไนซ์ลงในวิธีการดังนั้นจึงไม่ปลอดภัย
3. StringBuilder และ StringBuffer เหมือนกัน
StringBuilder และ StringBuffer มีคลาสแม่แบบสาธารณะ AbstractStringBuilder (คลาสนามธรรม)
หนึ่งในความแตกต่างระหว่างคลาสนามธรรมและอินเทอร์เฟซคือวิธีการสาธารณะบางอย่างของคลาสย่อยสามารถกำหนดได้ในคลาสนามธรรม คลาสย่อยจำเป็นต้องเพิ่มฟังก์ชั่นใหม่และไม่จำเป็นต้องทำซ้ำวิธีที่มีอยู่ ในขณะที่อินเตอร์เฟสกำหนดวิธีและค่าคงที่เท่านั้น
วิธีการของ StringBuilder และ StringBuffer จะเรียกวิธีการสาธารณะใน AbstractStringBuilder เช่น Super.Append (... ) มันเป็นเพียงแค่สตริงบัฟเฟอร์จะเพิ่มคำหลักที่ซิงโครไนซ์ลงในวิธีการและซิงโครไนซ์
ในที่สุดหากโปรแกรมไม่ใช่มัลติเธรดการใช้ StringBuilder นั้นมีประสิทธิภาพมากกว่า StringBuffer
บทสรุปของความแตกต่างระหว่างสตริงสตริงสตริง builder ใน java
* คลาสสตริงเป็นคลาสที่ไม่เปลี่ยนรูป ตราบใดที่สตริงได้รับการแก้ไขวัตถุใหม่จะถูกสร้างขึ้น
* StringBuffer และ StringBuilder เป็นคลาสที่ไม่แน่นอนและไม่มีวัตถุใหม่ที่ถูกสร้างขึ้นโดยการเปลี่ยนแปลงใด ๆ กับสตริง
เมื่อใช้ในทางปฏิบัติหากคุณมักจะต้องแก้ไขสตริงเช่นการแทรกการลบ ฯลฯ
* แต่อะไรคือความแตกต่างระหว่าง StringBuffer และ StringBuilder?
StringBuffer เป็นเธรดที่ปลอดภัยและสะดวกมากในการใช้งานในโปรแกรมแบบมัลติเธรด แต่ประสิทธิภาพของโปรแกรมจะช้าลง
StringBuilder ไม่ปลอดภัยกับเธรดและมีประสิทธิภาพมากกว่า StringBuffer ในเธรดเดียว
* โดยทั่วไปเวลาทำงานของทั้งสาม:
String> StringBuffer> StringBuilder