#String ต่างจาก StringBuffer ตรงที่ String มีลักษณะเป็น immutable(read only) คือไม่สามารถเปลี่ยนแปลงค่าที่อยู่ภายในได้หลังจากที่ถูกสร้างขึ้นมาแล้ว
#ส่วน StringBuffer ออกแบบมาเพื่อให้แก้ไขค่าภายในตัวได้หลังจากที่สร้างขึ้นมาแล้วก็เป็นลักษณะ mutable
ถึง แม้ว่า String จะมี method บางอย่างให้เราใช้เหมือนกับว่าจะเปลี่ยนแปลงค่าของ String นั้นได้ อย่างเช่น concat(), replace(), replaceAll(), toUpperCase(), toLowerCase(), trim() แต่ผลที่ได้จากการเรียกใช้ method เหล่านี้จะเป็น String object ตัวใหม่ ถ้าเราเรียกใช้ method เหล่านี้บ่อยครั้ง จะทำให้มี String object เกิดขึ้นมาใหม่เกินความจำเป็น ซึ่งจะทำให้ประสิทธิภาพการทำงานของโปรแกรมลดลงได้
ใน ทางกลับกัน StringBuffer จะมี method สำหรับเปลี่ยนแปลงค่าในภาย StringBuffer โดยที่จะไม่มีการสร้าง object ใหม่ขึ้นมา ทำให้การทำงานมีประสิทธิภาพมากกว่า อย่างเช่น append(), insert(), replace() และ reverse()
ดังนั้น ในกรณีที่เรามี String ที่เราต้องการแก้ไขค่าในภายหลัง เราควรใช้ StringBuffer แทน String
ใน Java 1.5 ได้มีการเพิ่ม class ใหม่ที่ชื่อว่า StringBuilder ขึ้นมา เพื่อทำหน้าที่เหมือนกับ StringBuffer แต่ StringBuilder จะต่างจาก StringBuffer ตรงที่ StringBuilder นั้นจะไม่เป็น thread-safe1 จุดประสงค์ที่ได้มีการเพิ่ม class นี้เข้ามาก็เพื่อให้ใช้แทน StringBuffer ในกรณีที่มีเพียง thread เดียวเท่านั้นใช้งาน StringBuffer object นั้น เนื่องจาก StringBuilder ไม่ต้องทำ thread synchronization จึงทำงานเร็วกว่า StringBuffer นี่หมายความว่าถ้าเรามีเพียง thread เดียวที่ใช้งาน object ที่เก็บค่า String เราก็ใช้ StringBuilder แต่ถ้ามีมากกว่า 1 thread มาใช้งาน object นี้ เราก็ใช้ StringBuffer แทน
#thread-safe1 หมายความว่า ส่วนของ code, method, หรือ class นั้นถูกออกแบบมาให้ thread มากกว่า 1 thread เข้ามาทำงานในส่วน code นั้น, ใน method นั้น หรือ class นั้น โดยสามารถทำงานได้ถูกต้อง ไม่มีปัญหาจากการทำงานแบบ parallel กันของ thread เหล่านั้น ปัญหาที่เกิดจากการทำงานของ thread มากกว่า 1 thread เราจะเรียกว่า race condition ในการที่จะทำให้ code, method หรือ class มีคุณสมบัติที่เป็น thread safe นั้น จะต้องมีการทำให้ thread หลาย ๆ thread นั้นทำงานประสานกันหรือที่เรียกว่า thread synchronization โดยการใช้ keyword synchronized
อ้างอิง :ref: จำได้มาจากเว็บไหน
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น