So sánh stringbuffer vs string builder năm 2024

Câu trả lời là 1 đó. “Khiemnd xin chào các bạn.” Tại sao ư? Không như những gì bạn nghĩ đúng không? Vì String là immutable. Khi khởi tạo str thì giá trị “Khiemnd xin chào các bạn. ” được lưu vào Constant String Pool. Không thể thay đổi => thread safe (An toàn trong xử lý luồng). Nên hàm “concat” trong String dùng ở đây không có ý nghĩa gì.

Đọc tới đây trong đầu bạn sẽ vân mông lung vì các bạn rất hay thao tác với String theo một kiểu nữa(Thực ra mình cũng vậy :d). Bình tĩnh, các bạn hãy xem đoạn code phía dưới.

Cùng ý đồ bên trên. Nối chuỗi.

package com.khiemnd5.controler; public class Test {

public static void main(String[] args) {
    String str = "Khiemnd xin chào các bạn. ";
    str += "Cảm ơn các bạn đã ghé thăm blog";
    System.out.println(str);
}
}

Output:?

\=> Khiemnd xin chào các bạn. Cảm ơn các bạn đã ghé thăm blog

😀 Tại sao ư? Để mình giải thích nhé!

Đầu tiên như đã nói str sẽ được lưu vào Constant String Pool. Để đó đã. Sau đó, str += “Cảm ơn các bạn đã ghé thăm blog”; thì java lại tạo ra vùng nhớ mới trong Pool. Giá trị vùng nhớ mới + giá trị vùng nhớ cũ thì nó tạo ra chuỗi đó thôi:d (Một vùng nhớ mới hoàn toàn chứa cả str cũ và str được nối vào). Bản chất giá trị vùng nhớ cũ vẫn là “Khiemnd xin chào các bạn.” chứ nó không hề bị override (ghi đè) nhé.

2. String Buffer hay StringBuilder sinh ra để giải quyết các vấn đề còn tồn tại của String. Khi khởi tạo thì giá trị sẽ được lưu vào heap.

String thì là immutable. Còn StringBuilder hay StringBuffer là mutable (Có thể thay đổi giá trị_ giá trị là giá trị khởi tạo ban đầu với một khoảng vùng nhớ đã được cấp)

Về cơ bản thì StringBuffer hay StringBuilder đểu có những phương thức giống nhau.

Chỉ có khác ở chỗ. StringBuffer an toàn cho xử lý đồng bộ => thread safe. Nhưng lại chậm về mặt hiệu năng. StringBuilder thì ngược lại. Không xử lý luồng an toàn nhưng tốc độ lại nhanh.

\=> Tùy vào tình huống sử dụng thực tế để áp dụng loại String nào cho hợp lý. 😀

Khi nối một chuỗi ngắn, đơn giản thì ko nhất thiết chúng ta cứ phải dùng StringBuilder hay Buffer làm gì. String vẫn làm tốt 😀

Có nhiều điểm khác nhau giữa lớp String và StringBuffer trong Java. Bảng dưới liệt kê các điểm khác nhau này:

Lớp StringBuffer Lớp StringBuilder Lớp StringBuffer là đồng bộ (synchronized), tức là an toàn luồng (thread safe). Nghĩa là hai Thread không thể gọi đồng thời các phương thức của lớp StringBuffer StringBuilder là không đồng bộ (non-synchronized) tức là không an toàn luồng. Nghĩa là hai Thread có thể gọi đồng thời các phương thức của lớp StringBuilder StringBuffer là kém hiệu quả hơn StringBuilder StringBuilder là hiệu quả hơn StringBuffer

Ví dụ về lớp StringBuffer trong Java

public class BufferTest{

public static void main(String[] args){  
    StringBuffer buffer=new StringBuffer("hello");  
    buffer.append("java");  
    System.out.println(buffer);  
}  
}

Chương trình trên sẽ cho kết quả dạng:

hellojava

Quảng cáo

Ví dụ về lớp StringBuilder trong Java

public class BuilderTest{

public static void main(String[] args){  
    StringBuilder builder=new StringBuilder("hello");  
    builder.append("java");  
    System.out.println(builder);  
}  
}

Chương trình trên sẽ cho kết quả dạng:

hellojava

Kiểm tra hiệu suất của lớp StringBuffer và StringBuilder trong Java

Bạn thử ví dụ đơn giản sau để kiểm tra hiệu suất của lớp StringBuffer và lớp StringBuilder trong Java:

public class ConcatTest{

public static void main(String[] args){  
    long startTime = System.currentTimeMillis();  
    StringBuffer sb = new StringBuffer("Java");  
    for (int i=0; i<10000; i++){  
        sb.append("Vietjack");  
    }  
    System.out.println("Thoi gian tieu ton boi StringBuffer: " + (System.currentTimeMillis() - startTime) + "ms");  
    startTime = System.currentTimeMillis();  
    StringBuilder sb2 = new StringBuilder("Java");  
    for (int i=0; i<10000; i++){  
        sb2.append("Vietjack");  
    }  
    System.out.println("Thoi gian tieu ton boi StringBuilder: " + (System.currentTimeMillis() - startTime) + "ms");  
}  
}

Quảng cáo

Chương trình trên sẽ cho kết quả dạng:

Time taken by StringBuffer: 16ms Time taken by StringBuilder: 0ms

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

So sánh stringbuffer vs string builder năm 2024

So sánh stringbuffer vs string builder năm 2024

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập Java. Khóa học có giá chỉ 300K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.

Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp a Tuyền, cựu sinh viên Bách Khoa K53, fb: https://www.facebook.com/tuyen.vietjack

Loạt bài hướng dẫn của chúng tôi dựa một phần trên nguồn tài liệu của: Tutorialspoint.com

Follow facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.