Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความแตกต่างระหว่าง String และ StringBuffer ใน Java

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)