SỰ KHÁC NHAU GIỮA StringBuffer VÀ StringBuilder

Written by Trong Tran The

April 27, 2017

stringb

Có nhiều điểm khác nhau giữa StringBuffer và StringBuilder. Danh sách các điểm khác nhau đó được liệt kê dưới đây.

Điểm giống nhau:

StringBuilder và StringBuffer được thiết kế với mục đích giống nhau, đó là thao tác hiệu quả với chuỗi, chúng cũng có các phương thức giống nhau để làm việc với chuỗi.

Điểm khác nhau:

StringBuffer thuộc loại synchronized do đó các phương thức của nó đều là “thread safe” (thích hợp với xử lý đa luồng – multi thread), trong khi StringBuilder thì ngược lại, không synchronized.

Với đặc tính “thread safe”, các phương thức của StringBuffer sẽ chạy chậm hơn so với StringBuilder, vì vậy nếu không làm về Multi-thread bạn nên chọn StringBuilder thay vì chọn StringBuffer.

 

Ví dụ về StringBuffer:

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

Ví dụ về StringBuilder

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

Output:
hello
hellojava

Thử nghiệm hiệu suất của StringBuffer và StringBuilder

Cùng xem đoạn code để kiểm tra hiệu suất của StringBuffer và StringBuilder.

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("Tpoint");
    }
    System.out.println("Time taken by StringBuffer: " + (System.currentTimeMillis() - startTime) + "ms");
    startTime = System.currentTimeMillis();
    StringBuilder sb2 = new StringBuilder("Java");
    for (int i=0; i<10000; i++){
       sb2.append("Tpoint");
    }
    System.out.println("Time taken by StringBuilder: " + (System.currentTimeMillis() - startTime) + "ms");
  }
}
Thời gian làm việc của StringBuffer: 16ms
Thời gian làm việc của StringBuilder: 0ms

(Bài viết trên được dịch từ bài báo Difference between StringBuffer and StringBuilder của trang javapoint.com)

 

You May Also Like…

Contact with TechLead

Describe your project and needs of software engineering in short and discuss the ways of collaboration with our team

  CONTACT US

    Table of content