ความแตกต่างระหว่าง String และ StringBuffer Class ใน Java
เนื้อหา
String และ StringBuffer ทั้งคู่เป็นคลาสที่ทำงานกับสตริง คลาส StringBuffer เป็นคลาสเพียร์ของคลาส String วัตถุของคลาส String มีความยาวคงที่ วัตถุของคลาส StringBuffer สามารถขยายได้ ความแตกต่างพื้นฐานระหว่าง String และ StringBuffer คือวัตถุของคลาส "String" คือ ไม่เปลี่ยนรูป. วัตถุของคลาส“ StringBuffer” ไม่แน่นอน.
- แผนภูมิเปรียบเทียบ
- คำนิยาม
- ความแตกต่างที่สำคัญ
- ข้อสรุป
แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | เชือก | StringBuffer |
---|---|---|
ขั้นพื้นฐาน | ความยาวของวัตถุสตริงได้รับการแก้ไข | ความยาวของ StringBuffer สามารถเพิ่มขึ้นได้ |
การแก้ไข | วัตถุสตริงไม่เปลี่ยนรูป | วัตถุ StringBuffer ไม่แน่นอน |
ประสิทธิภาพ | มันช้าลงในระหว่างการต่อข้อมูล | มันจะเร็วกว่าในระหว่างการต่อข้อมูล |
หน่วยความจำ | สิ้นเปลืองหน่วยความจำมากขึ้น | ใช้หน่วยความจำน้อยลง |
การเก็บรักษา | สตริงพูลคงที่ | หน่วยความจำฮีป |
คำจำกัดความของ String
“ String” เป็นคลาสใน Java วัตถุของคลาสสตริงมีความยาวคงที่และที่สำคัญที่สุดต้องจดจำวัตถุของคลาสสตริงคือ“ ไม่เปลี่ยนรูป” เมื่อคุณเริ่มต้นวัตถุ String คุณจะไม่สามารถแก้ไขวัตถุนั้นได้อีก วัตถุของคลาส String ถูกเก็บไว้ใน String ค่าคงที่พูล
ให้เราเข้าใจก่อนว่าเมื่อใดก็ตามที่คุณสร้างสตริงใด ๆ คุณสร้างวัตถุประเภทสตริง ค่าคงที่สตริงยังเป็นวัตถุสตริง
System.out.ln ("สวัสดีนี่คือ Teckpix Solution");
ในข้อความข้างต้นสตริง“ Hello this is Teckpix Solution” เป็นค่าคงที่ของสตริง
ตอนนี้ให้เราเข้าใจความแปรปรวนของวัตถุ String ด้วยความช่วยเหลือของตัวอย่าง
String str = new String ("Teckpix"); str.concat ( "โซลูชั่น"); system.out.ln (str); // Teckpix เอาท์พุท
ในรหัสข้างต้นฉันพยายามเชื่อมสองสาย "Teckpix" และ "ทางออก" เข้าด้วยกัน ดังที่เราทราบเมื่อใดก็ตามที่มีการสร้างสตริงซึ่งหมายความว่าวัตถุประเภทสตริงจะถูกสร้างขึ้น ดังนั้นสตริง“ Teckpix” จึงสร้างวัตถุซึ่งการอ้างอิงถูกกำหนดให้กับวัตถุสตริง“ str” ต่อไปฉันพยายามเชื่อมสตริงอื่น“ โซลูชัน” กับสตริง“ Teckpix” โดยใช้วิธี“ concat ()” ของคลาสสตริง
เนื่องจากวัตถุ String ไม่เปลี่ยนรูปไม่มีการแก้ไขใด ๆ กับสตริง“ Teckpix” และสตริงใหม่“ Solution” สร้างวัตถุอื่นในพูลคงที่ของสตริง แต่การอ้างอิงไปยังวัตถุ“ Solution” ไม่ได้ถูกดักจับโดยวัตถุใด ๆ ดังนั้นการอ้างอิงไปยังวัตถุ Solution จะหายไปแม้ว่าจะยังคงปรากฏอยู่ในสระว่ายน้ำคงที่สตริง เนื่องจากไม่มีการดัดแปลงใด ๆ กับวัตถุ Teckpix เมื่อฉันวัตถุ str ที่ฉันกำหนดอ้างอิง Teckpix ก่อนหน้านี้จะสตริง "Teckpix" เท่านั้น
ความหมายของ StringBuffer
คลาส“ StringBuffer” เป็นคลาสเพียร์ของคลาส“ String” คลาส StringBuffer จัดเตรียมฟังก์ชันการทำงานเพิ่มเติมให้กับสตริง วัตถุของคลาส StringBuffer ไม่แน่นอนซึ่งเป็นวัตถุที่สามารถแก้ไขได้ ความยาวของวัตถุ StringBuffer สามารถเติบโตได้ คุณสามารถแทรกอักขระหรือสตริงย่อยตรงกลางสตริงตัวอักษรที่กำหนดให้กับวัตถุ StringBuffer หรือที่ส่วนท้ายของมัน StringBuffer จัดสรรพื้นที่สำหรับ 16 อักขระเพิ่มเติมเมื่อไม่มีการร้องขอความยาวที่เฉพาะเจาะจง
ให้เราเข้าใจความผันแปรของวัตถุ StringBuffer ด้วยความช่วยเหลือของตัวอย่าง:
StringBuffer Sb = ใหม่ StringBuffer ("Teckpix"); Sb.append ( "โซลูชั่น"); system.out.ln (Sb); // ทางออก Teckpix ทางออก
ที่เรารู้ว่าวัตถุ StringBuffer ไม่แน่นอน วิธีการผนวก () แก้ไขวัตถุ StringBuffer Sb ซึ่งเริ่มแรกการอ้างอิงของวัตถุ” Teckpix” ได้รับมอบหมายก่อนหน้านี้ วิธีการผนวก () ผนวกสตริงตัวอักษรใหม่ "การแก้ปัญหา" ต่อท้ายของตัวอักษรสตริง "Teckpix" ตอนนี้เมื่อฉันวัตถุ Sb มันจะเป็นวัตถุสตริงดัดแปลง "Teckpix Solutions"
- ความยาวของวัตถุ String ได้รับการแก้ไข แต่ความยาวของวัตถุของ StringBuffer สามารถเพิ่มได้เมื่อต้องการ
- วัตถุ String ไม่สามารถเปลี่ยนแปลงได้เช่นเป็นวัตถุที่ไม่สามารถกำหนดอีกครั้งได้ในขณะที่วัตถุของ StringBuffer ไม่สามารถเปลี่ยนแปลงได้
- วัตถุสตริงทำงานช้าลงในขณะที่วัตถุ StringBuffer เร็วขึ้น
- วัตถุ String ใช้หน่วยความจำเพิ่มเติมในขณะที่วัตถุ StringBuffer ใช้หน่วยความจำน้อยลง
- วัตถุสตริงจะถูกเก็บไว้ในพูลคงที่ในขณะที่วัตถุ StringBuffer จะถูกเก็บไว้ในหน่วยความจำฮีป
สรุป:
วัตถุ StringBuffer ให้ฟังก์ชันการทำงานเพิ่มเติมกับสายอักขระเมื่อเปรียบเทียบกับคลาสตริง ดังนั้นจึงควรทำงานกับ StringBuffer แทนคลาส String