สตริงที่จัดทำโดยคลาส StringBuffer นี้ได้รับการแก้ไข คุณสามารถใช้ StringBuffer เมื่อคุณรู้ว่าข้อมูลตัวละครกำลังจะเปลี่ยนแปลง โดยทั่วไป คุณใช้ StringBuffers เพื่อสร้างข้อมูลอักขระแบบไดนามิก
มีสามคลาสใน Java ที่รับผิดชอบการทำงานของอักขระ
1.ตัวละครดำเนินการด้วยตัวละครตัวเดียว
2.String ดำเนินการกับสตริงของอักขระ คลาสที่ไม่เปลี่ยนรูป
3.StringBuffer ยังดำเนินการกับสตริงอักขระ แต่เป็นคลาสตัวแปร
สตริง:
มันเป็นวัตถุและไม่ใช่ประเภทดั้งเดิม
มันเป็นวัตถุที่ไม่เปลี่ยนรูป เมื่อถูกสร้างขึ้นแล้ว ค่าของมันจะไม่สามารถแก้ไขได้
การแก้ไขใดๆ กับออบเจ็กต์ String ที่มีอยู่เกี่ยวข้องกับการสร้างออบเจ็กต์ใหม่ขึ้นมาใหม่ จากนั้นจึงบันทึกค่าใหม่ลงไป
String เป็นคลาสสุดท้าย กล่าวคือ ไม่สามารถสืบทอดได้
สตริงบัฟเฟอร์:
มันเป็นวัตถุที่ไม่แน่นอน เมื่อมันถูกแก้ไข วัตถุจะไม่ถูกสร้างขึ้นใหม่เหมือนกับ String โดยสามารถสร้างได้ผ่าน Constructor เท่านั้น
StringBuffer sb = StringBuffer ใหม่ ();
หมายเหตุ: ไม่สามารถชำระด้วยสัญลักษณ์การจ่ายได้
sb = "ยินดีต้อนรับสู่ที่นี่!";//error
หลังจากสร้างวัตถุแล้ว พื้นที่หน่วยความจำจะถูกจัดสรรในหน่วยความจำ และค่า null จะถูกบันทึกในขั้นต้นไปยัง StringBuffer
เมื่อชำระค่าคุณสามารถใช้วิธีการต่อท้ายได้
sb.ผนวก("สวัสดี");
ข้างต้นเป็นข้อความที่ตัดตอนมาซึ่งพบได้ทั่วไปบนอินเทอร์เน็ต ต่อไปนี้เป็นข้อมูลเชิงลึกเพิ่มเติมของฉันเอง:
ไม่สามารถเปลี่ยนที่อยู่ได้ แต่สามารถเปลี่ยนความยาวและเนื้อหาได้ วิธีการผนวก () คือการผนวกเมื่อหน่วยความจำที่สงวนไว้เกินหน่วยความจำจะเพิ่มเป็นสองเท่า
การเปรียบเทียบประสิทธิภาพ: StringBuffer สูงกว่า String เนื่องจาก StringBuffer ได้สงวนพื้นที่ไว้และต่อท้ายอย่างต่อเนื่อง จึงทำงานบนวัตถุเดียวเท่านั้น ไม่สามารถแก้ไขสตริงได้ และสามารถสร้างออบเจ็กต์ซ้ำๆ เท่านั้นเพื่อให้ได้รับการแก้ไข ――หากคุณต่อท้าย แทนที่ แก้ไข แทรก หรือลบสตริงบ่อยครั้ง วิธีที่ดีที่สุดคือใช้ StringBuffer หากคุณต้องใช้ String คุณสามารถใช้ StringBuffer เพื่อเรียก toString() เพื่อแปลงเป็น String
เครื่องของฉันค่อนข้างขยะแขยง และผลลัพธ์หลังจากใช้งานคือ:
เวลาทำงานของสตริง: 164593
-
เวลาทำงานของ StringBuffer: 31
นอกจากนี้ String ยังมีวิธีการบรรจุ แต่ StringBuffer ไม่มี ประกอบด้วยวิธีการรวม ที่นี่คุณสามารถเรียกคืนวิธีการบรรจุได้
ผลการดำเนินการก็คือ
จริง