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