ค่าของสตริงไม่เปลี่ยนรูป
คลาส StringBuffer นั้นเหมือนกับคลาสสตริงและยังใช้เพื่อแสดงถึงสตริง การใช้หน่วยความจำ
StringBuffer จัดสรรบัฟเฟอร์ความยาว 16 ไบต์ตามค่าเริ่มต้น
StringBuffer ไม่เหมือนสตริงเท่านั้น
StringBuffer str1 = new StringBuffer (); ความยาว 16 ไบต์สงวนไว้เบื้องหลัง StringBuffer Str3 = ใหม่ StringBuffer (www.weixueyuan.net);
วิธีการหลักของคลาส StringBuffer
วิธีการในคลาส StringBuffer ส่วนใหญ่มุ่งเน้นไปที่การทำงานของสตริงเช่นการผนวกการแทรกและการลบซึ่งเป็นความแตกต่างหลักระหว่างคลาส StringBuffer และคลาสสตริง ในการพัฒนาที่เกิดขึ้นจริงหากคุณต้องการทำการดัดแปลงสตริงบ่อยครั้งขอแนะนำให้ใช้ StringBuffer
1) ผนวก () วิธีการ
วิธีการผนวก () ใช้เพื่อผนวกเนื้อหาไปยังจุดสิ้นสุดของสตริงปัจจุบันคล้ายกับการเชื่อมต่อสตริง หลังจากเรียกใช้วิธีนี้เนื้อหาของวัตถุ StringBuffer ก็เปลี่ยนไปเช่น:
StringBuffer str = new StringBuffer ("BIANCHENG100"); str.Append (จริง);
จากนั้นค่าของวัตถุ Str จะกลายเป็น "biancheng100true" โปรดทราบว่าเนื้อหาที่ชี้ไปที่ STR มีการเปลี่ยนแปลงไม่ใช่การชี้ของ STR มีการเปลี่ยนแปลง
การดำเนินการ "+" ของสตริงจริง ๆ แล้วเพื่อสร้างวัตถุ StringBuffer ก่อนจากนั้นเรียกเมธอดผนวก () เพื่อแยกชิ้นส่วนสตริงและในที่สุดเรียกใช้เมธอด toString () เพื่อแปลงเป็นสตริง
ด้วยวิธีนี้การดำเนินการเชื่อมต่อของสตริงมีการดำเนินการเพิ่มเติมมากกว่า StringBuffer และประสิทธิภาพจะลดลงอย่างหลีกเลี่ยงไม่ได้
อย่างไรก็ตามสำหรับสตริงที่เล็กกว่าการดำเนินการ "+" นั้นใช้งานง่ายและอ่านง่ายกว่าและบางครั้งคุณสามารถเสียสละประสิทธิภาพได้เล็กน้อย
2) Deletecharat ()
เมธอด DeleteCharat () ใช้เพื่อลบอักขระที่ตำแหน่งที่ระบุและเพื่อสร้างสตริงใหม่ของอักขระที่เหลืออยู่ ตัวอย่างเช่น:
StringBuffer str = new StringBuffer ("ABCDEF"); str.
รหัสนี้จะลบอักขระด้วยค่าดัชนี 3 คืออักขระ "D"
นอกจากนี้คุณยังสามารถลบอักขระได้หลายตัวในครั้งเดียวผ่านวิธี DELETE () ตัวอย่างเช่น:
StringBuffer str = new StringBuffer ("abcdef"); str.delete (1, 4);
รหัสนี้จะลบอักขระที่มีค่าดัชนีระหว่าง 1 และ 4 รวมถึงค่าดัชนี 1 แต่ไม่ใช่ 4
3) วิธีแทรก ()
INSERT () ใช้เพื่อแทรกสตริงที่ตำแหน่งที่ระบุและถือได้ว่าเป็นเวอร์ชันที่อัพเกรดของภาคผนวก () ตัวอย่างเช่น:
StringBuffer str = new StringBuffer ("abcdef"); str.insert (3, "xyz");
สตริงที่ชี้ไปที่ StR คือ ABCDXYZEF
4) วิธีการ setcharat ()
วิธีการ setcharat () ใช้เพื่อแก้ไขอักขระที่ตำแหน่งที่ระบุ ตัวอย่างเช่น:
StringBuffer str = new StringBuffer ("abcdef"); str.setcharat (3, 'z');
รหัสนี้จะแก้ไขอักขระด้วยค่าดัชนี 3 ถึง z และสตริงที่ชี้ไปที่ str คือ abczef
ข้างต้นเป็นเพียงคำอธิบายง่ายๆของวิธีการที่ใช้กันทั่วไป
การเปรียบเทียบประสิทธิภาพระหว่าง String และ Stringbuffer
เพื่อให้เห็นประสิทธิภาพการดำเนินการของพวกเขาอย่างชัดเจนยิ่งขึ้นรหัสต่อไปนี้จะเพิ่มตัวอักษรภาษาอังกฤษ 26 ฉบับ 10,000 ครั้ง
การสาธิตคลาสสาธารณะ {โมฆะคงที่หลัก (String [] args) {String fragment = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; (int i = 0; i <times; i ++) {str1 += แฟรกเมนต์; // โดย StringBuffer Long Timestart2 = System.currentTimeMillis (); (); System.out.println ("StringBuffer:" + (TimeNd2 - TimeStart2) + "MS"); ผลการทำงาน:
สตริง: 5287MSStringBuffer: 3MS
ข้อสรุปนั้นเห็นได้ชัดว่าประสิทธิภาพการดำเนินการของ StringBuffer นั้นเร็วกว่า String หลายพันเท่า
สตริง: 35923MSStringBuffer: 8MS
ดังนั้นจึงขอแนะนำให้ใช้ StringBuffer เมื่อเกี่ยวข้องกับการดำเนินการสตริงจำนวนมาก
คลาส StringBuilder
ฟังก์ชั่นของคลาส StringBuilder และคลาส StringBuffer นั้นคล้ายคลึงกันและวิธีการที่คล้ายกัน เร็วขึ้นเล็กน้อย
อินเทอร์เฟซ Charsequence ถูกนำไปใช้ใน StringBuffer, StringBuilder และ String
Charsequence เป็นอินเทอร์เฟซที่กำหนดการดำเนินการสตริง
กระบวนการใช้งานของอินเทอร์เฟซ Charsequence ของ StringBuffer, StringBuilder และ String นั้นแตกต่างกันดังแสดงในรูปด้านล่าง:
จะเห็นได้ว่าสตริงโดยตรงใช้อินเทอร์เฟซ Charequence;
สรุป
ความปลอดภัยด้าย:
StringBuffer: เธรดปลอดภัย
StringBuilder: เธรดไม่ปลอดภัย
ความเร็ว:
โดยทั่วไปแล้วความเร็วจากเร็วถึงช้าคือ StringBuilder> StringBuffer> String แน่นอนว่านี่คือความสัมพันธ์ไม่ใช่แบบสัมบูรณ์
สภาพแวดล้อมการใช้งาน:
ใช้สตริงเพื่อใช้งานข้อมูลจำนวนเล็กน้อย
ใช้ StringBuilder เพื่อใช้งานข้อมูลจำนวนมากในเธรดเดียว
การทำงานแบบมัลติเธรดของข้อมูลจำนวนมากใช้ StringBuffer