StringBuffer กับ StringBuilder: ความแตกต่างระหว่าง StringBuffer & StringBuilder
เผยแพร่แล้ว: 2020-10-20เมื่อเขียนโปรแกรมใน Java Strings เป็นหนึ่งในคลาสที่ใช้มากที่สุด สตริงคืออ็อบเจ็กต์ที่ใช้เมื่อคุณต้องการแสดงลำดับของอักขระ พวกมันมีคุณสมบัติหลายอย่าง และหนึ่งในนั้นคือความไม่เปลี่ยนรูป ซึ่งหมายความว่าไม่สามารถแก้ไขได้ บัฟเฟอร์สตริงและตัวสร้างสตริงถูกนำมาใช้ใน Java เพื่อแก้ไขปัญหานี้ การใช้คลาสเหล่านี้ การปรับเปลี่ยนสามารถทำได้ครั้งแล้วครั้งเล่า
ในบทความนี้ เราจะพูดถึงชั้นเรียนทั้งสองนี้และอภิปรายความแตกต่างระหว่างพวกเขา ก่อนดำดิ่งสู่ชั้นเรียน เราจะทำความคุ้นเคยกับแนวคิดของสตริงในภาษาชวา
สารบัญ
สตริงในภาษา Java
สตริงถูกใช้ใน Java เพื่อจัดเก็บลำดับของค่าอักขระ สิ่งเหล่านี้ถือเป็นอ็อบเจ็กต์ในภาษาการเขียนโปรแกรม Java เรามีตัวเลือกมากมายในการสร้างและจัดการสตริง
ในการสร้างสตริง ไวยากรณ์พื้นฐานมีดังนี้:
ประโยคสตริง = "สวัสดีชาวโลก!";
สตริงมีคุณสมบัติบางอย่าง และหนึ่งในนั้นคือสตริงที่ ไม่เปลี่ยนรูป ซึ่งหมายความว่าไม่สามารถแก้ไขได้ แต่ถ้าคุณต้องการสตริงที่สามารถแก้ไขได้ ในการดำเนินการดังกล่าว จะใช้การแก้ไข Java ที่เรียกว่า String Buffers และ String Builders ตอนนี้เราเข้าใจแล้วว่าสตริงคืออะไร เราจะดำเนินการเปรียบเทียบต่อไป

ต้องอ่าน: แนวคิดและหัวข้อโปรเจ็กต์ Java
เรียนรู้ หลักสูตรซอฟต์แวร์ ออนไลน์จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว
StringBuffer
String Buffer เป็นการแก้ไขคลาสที่ใช้ใน Java เพื่อเพิ่มฟังก์ชันการทำงานให้กับสตริงโดยให้คุณลักษณะเช่น mutability เราสามารถใช้วิธีการต่างๆ เช่น append(), insert(), reverse(), replace() เป็นต้น เพื่อแก้ไขสตริง StringBuffer มีตัวสร้างที่กำหนดไว้สี่ตัว พวกเขามีดังนี้:
- StringBuffer(): สิ่งนี้สร้างบัฟเฟอร์สตริงว่างโดยไม่มีคุณลักษณะที่มีความจุ 16 อักขระ
- StringBuffer(CharSequence chars ): สร้าง StringBuffer ที่มีอักขระเดียวกันกับ CharSequence ที่ระบุ
- StringBuffer(ขนาด int): สิ่งนี้สร้าง StringBuffer โดยไม่มีอักขระที่มีความจุเริ่มต้นที่ระบุ
- StringBuffer(String str ): สร้างวัตถุ StringBuffer ด้วยสตริงที่ระบุในตอนแรก
ให้เราพูดถึงวิธีการต่างๆ ที่เราสามารถใช้ใน StringBuffer เพื่อแก้ไขสตริงเฉพาะ:
- ความยาว () และความจุ (): ความยาวปัจจุบันของ StringBuffer สามารถพบได้โดยใช้วิธี length() ในขณะที่ค้นหาความจุทั้งหมด เราใช้วิธีความจุ ()
- append(): วิธีการ append() ใช้เพื่อเชื่อมสตริงกับประเภทข้อมูลอื่นหรือที่คล้ายกัน เราสามารถผนวกสตริง ตัวเลข และอ็อบเจ็กต์เข้ากับสตริงโดยใช้วิธีนี้
- แทรก (): วิธีนี้ใช้เพื่อแทรกสตริงหนึ่งลงในสตริงอื่น
- charAt(): วิธีนี้ใช้เพื่อค้นหาค่าของอักขระตัวเดียวใน StringBuffer
เราสามารถดูว่าเราสามารถใช้ StringBuffer เพื่อแก้ไขสตริงตามความต้องการของเราได้อย่างไร เหตุใดเราจึงใช้ StringBuilder ในเมื่อเราสามารถรับฟังก์ชันดังกล่าวกับ StringBuffer ได้
เรียนรู้: แนวคิดและหัวข้อโครงการ Android ที่กำลังมาแรง 20 อันดับแรกสำหรับผู้เริ่มต้น
StringBuilder
StringBuilder ใน Java เป็นลำดับของอักขระที่เปลี่ยนแปลงได้ StringBuilder จัดเตรียมคลาสสำรองเพื่อสร้างสตริงที่สามารถแก้ไขได้ เนื่องจากเรารู้ว่าสตริงนั้นเปลี่ยนไม่ได้ มันคล้ายกับ StringBuffer มาก แต่ที่ซึ่งทั้งสองต่างกันอยู่ในการซิงโครไนซ์ StringBuilder ไม่ได้ซิงโครไนซ์ ซึ่งหมายความว่าไม่ปลอดภัยสำหรับเธรด StringBuilder ยังมีตัวสร้างที่กำหนดไว้สี่ตัว พวกเขามีดังนี้:

- StringBuilder(): มันสร้าง StringBuilder ว่างที่มีห้องสำหรับ 16 ตัวอักษร
- StringBuilder(ขนาด int): มันสร้างสตริงว่างด้วยขนาดที่ระบุ
- StringBuilder(CharSequence seq): มันสร้าง StringBuilder ที่มีอักขระเดียวกันกับ CharSequence ที่ระบุ
- StringBuilder(String str ): สร้างอ็อบเจ็กต์ String Builder ด้วยสตริง str ที่ระบุในขั้นต้น
ให้เราพูดถึงวิธีการบางอย่างที่เราสามารถใช้ได้บน StringBuilders:
- append(): วิธีนี้ใช้เมื่อคุณต้องการผนวกบางสิ่งกับสตริง ไม่ว่าจะเป็นสตริงหรือตัวเลขหรืออ็อบเจกต์
- แทนที่ (): หากคุณกำลังจะแทนที่สตริงของอักขระจากชุดอักขระอื่น คุณสามารถใช้วิธีการแทนที่ ()
- สตริงย่อย (): หากคุณกำลังจะได้รับส่วนหนึ่งของสตริง คุณสามารถรับได้โดยใช้เมธอด substring()
ดังที่เราเห็นแล้วว่า StringBuffer และ StringBuilder ดูเหมือนจะเหมือนกัน แม้ว่าจะมีฟังก์ชันการทำงานที่คล้ายคลึงกัน แต่ก็ค่อนข้างแตกต่างกัน และคุณอาจจะดีกว่าที่จะใช้อย่างใดอย่างหนึ่งมากกว่าที่อื่นในหลายกรณี
ความแตกต่างระหว่างสองคลาส
การซิงโครไนซ์
โดยค่าเริ่มต้น StringBuffer จะถูกซิงโครไนซ์ในขณะที่ StringBuilder ไม่มีการซิงโครไนซ์ ในกรณีที่ต้องเข้าถึงสตริงโดยหลายเธรดและไม่มีการซิงโครไนซ์ภายนอก คุณต้องใช้ StringBuffer ไม่ใช่ StringBuilder
ปลอดภัยต่อเธรด
StringBuilder ไม่ใช่คลาสที่ปลอดภัยสำหรับเธรด ในขณะที่ StringBuffer มีคุณสมบัตินี้ นี่เป็นเพราะความจริงที่ว่า StringBuffer ถูกซิงโครไนซ์
ความเร็ว
เนื่องจากคุณลักษณะสองประการข้างต้น ทำให้ StringBuffer ทำงานช้ากว่าเมื่อเปรียบเทียบกับ StringBuilder ดังนั้น หากคุณต้องการประสิทธิภาพที่เร็วขึ้นและไม่ต้องการคุณสมบัติข้างต้น ความเร็วและประสิทธิภาพของ StringBuilder จะทำให้เป็นตัวเลือกที่ดีกว่า
StringBuilder wad ที่นำมาใช้ใน Java 1.5 โดยการวิเคราะห์ข้อบกพร่องของ StringBuffer และมีการเปลี่ยนแปลงเพียงพอที่ทำให้สามารถใช้งานได้ในบางสถานการณ์ที่อดีตอาจได้รับผลกระทบด้านประสิทธิภาพ
ประสิทธิภาพและการใช้หน่วยความจำ
ดังที่เราสามารถเรียนรู้ได้จากประเด็นข้างต้น StringBuilder นั้นเร็วกว่าเมื่อเทียบกับประสิทธิภาพเมื่อเทียบกับ StringBuffer การใช้หน่วยความจำระหว่างทั้งสองนั้นแตกต่างกันโดยที่ StringBuffer ใช้หน่วยความจำมากกว่าเมื่อเทียบกับตัวหลัง

อ่านเพิ่มเติม: คำถามและคำตอบสัมภาษณ์ Java 130+ ยอดนิยม
ห่อ
แม้ว่า StringBuilder จะถูกจัดประเภทเป็นทางเลือกให้กับคลาสสตริงเช่น StringBuffer แต่ก็มีความยืดหยุ่นมากกว่าเมื่อใช้งาน
ดังที่คุณเห็นแล้วว่าหากคุณต้องการแก้ไขสตริงซึ่งโดยค่าเริ่มต้นจะเป็นชุดอักขระที่ไม่เปลี่ยนรูปแบบ คุณต้องใช้คลาส StringBuffer หรือ StringBuilder เนื่องจากพวกมันมีความสามารถในการเปลี่ยนสตริง ทั้งสองคลาสมีความคล้ายคลึงกันบนพื้นผิว อย่างที่คุณเห็น พวกเขาใช้วิธีการเดียวกันและตัวสร้างที่คล้ายกัน
ความแตกต่างระหว่างทั้งสองมาจากการซิงโครไนซ์และเธรด หากคุณกำลังทำงานในสภาพแวดล้อมที่คุณไม่สนใจเรื่องความปลอดภัยของเธรด คุณสามารถใช้ StringBuilder ได้ เนื่องจากมันจะเร็วกว่าและมีประสิทธิภาพมาก แต่ถ้าคุณต้องการความปลอดภัยของเธรด คุณควรใช้ StringBuffer เนื่องจากมันซิงโครไนซ์และเธรด- ปลอดภัย.
หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับ Java การพัฒนาซอฟต์แวร์แบบฟูลสแตก โปรดดู โปรแกรม Executive PG ของ upGrad & IIIT-B ในการพัฒนาซอฟต์แวร์ – ความเชี่ยวชาญในความปลอดภัยทางไซเบอร์ ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีการฝึกอบรมที่เข้มงวดมากกว่า 500 ชั่วโมง 9+ โครงการและการมอบหมาย สถานะศิษย์เก่า IIIT-B โครงการหลักในทางปฏิบัติและความช่วยเหลือด้านงานกับ บริษัท ชั้นนำ
