แนะนำ, 2024

ตัวเลือกของบรรณาธิการ

ความแตกต่างระหว่าง 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.println ("สวัสดีนี่คือ Teckpix Solution"); 

ในข้อความข้างต้นสตริง“ Hello this is Teckpix Solution” เป็นค่าคงที่สตริง

ตอนนี้ให้เราเข้าใจความแปรปรวนของวัตถุ String ด้วยความช่วยเหลือของตัวอย่าง

 String str = new String ("Teckpix"); str.concat ( "โซลูชั่น"); system.out.println (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 ด้วยความช่วยเหลือของตัวอย่าง:

 StringBuffre Sb = ใหม่ StringBuffer ("Teckpix"); Sb.append ( "โซลูชั่น"); system.out.println (Sb); // ทางออก Teckpix ทางออก 

ที่เรารู้ว่าวัตถุ StringBuffer ไม่แน่นอน วิธีการผนวก () แก้ไขวัตถุ StringBuffer Sb ซึ่งเริ่มแรกการอ้างอิงของวัตถุ” Teckpix” ได้รับมอบหมายก่อนหน้านี้ วิธีการต่อท้าย () ผนวกตัวอักษรสตริงใหม่ "โซลูชั่น" ที่ส่วนท้ายของตัวอักษรสตริง "Teckpix" ตอนนี้เมื่อฉันพิมพ์วัตถุ Sb มันจะพิมพ์วัตถุสตริงดัดแปลง“ Teckpix Solutions”

ความแตกต่างที่สำคัญระหว่าง String และ StringBuffer

  1. ความยาวของวัตถุ String ได้รับการแก้ไข แต่ความยาวของวัตถุของ StringBuffer สามารถเพิ่มได้เมื่อต้องการ
  2. วัตถุ String นั้นไม่เปลี่ยนรูปนั่นคือมันไม่สามารถกำหนดค่าวัตถุอีกครั้งในขณะที่วัตถุของ StringBuffer ไม่แน่นอน
  3. วัตถุสตริงทำงานช้าลงในขณะที่วัตถุ StringBuffer เร็วขึ้น
  4. วัตถุ String ใช้หน่วยความจำเพิ่มเติมในขณะที่วัตถุ StringBuffer ใช้หน่วยความจำน้อยลง
  5. วัตถุสตริงจะถูกเก็บไว้ในพูลคงที่ในขณะที่วัตถุ StringBuffer จะถูกเก็บไว้ในหน่วยความจำฮีป

สรุป:

วัตถุ StringBuffer ให้ฟังก์ชันการทำงานเพิ่มเติมกับสายอักขระเมื่อเปรียบเทียบกับคลาสตริง ดังนั้นจึงควรทำงานกับ StringBuffer แทนคลาส String

Top