String
- Immutable (ไม่สามารถเปลี่ยนแปลงค่าได้)
- การ concat สร้างอ็อบเจกต์ใหม่ทุกครั้ง → ช้ากว่าเมื่อทำบ่อย
- ใช้หน่วยความจำน้อยกว่าเมื่อ concat น้อย (เพราะ String Pool)
- Override
equals() → เปรียบเทียบเนื้อหาได้ด้วย .equals()
StringBuffer
- Mutable (เปลี่ยนแปลงค่าได้)
- เร็วกว่าสำหรับการ concat ซ้ำๆ (ไม่สร้างอ็อบเจกต์ใหม่)
- Thread-safe (synchronized)
- ไม่ Override
equals() → ใช้ .equals() เปรียบเทียบ reference
ตัวอย่าง
String
public class StringDemo {
public static void main(String args[]) {
String palindrome = "Dot saw I was Tod";
int len = palindrome.length();
System.out.println("String Length is : " + len);
}
}
StringBuffer
public class Demo {
public static void main(String args[]) {
StringBuffer sBuffer = new StringBuffer("test");
sBuffer.append(" String Buffer");
System.out.println(sBuffer); // test String Buffer
}
}
สรุป: เมื่อไหนควรใช้อะไร?
- String: ข้อมูลคงที่, เปรียบเทียบบ่อย, ไม่แก้ไขบ่อย
- StringBuffer: แก้ไข/concat บ่อย, หลาย thread (thread-safe)
- StringBuilder: แก้ไข/concat บ่อย, single-thread (เร็วกว่า StringBuffer)