Sự khác nhau giữa String và StringBuffer trong java

images 1

Sự khác nhau giữa String và StringBuffer trong java được thể hiện trong bảng sau:

No.StringStringBuffer
1)Lớp String là bất biến (immutable).Lớp StringBuffer là có thể sửa đổi (mutable).
2)Khi bạn thực hiện nối nhiều chuỗi thì lớp String xử lý chậm và tốn nhiều bộ nhớ hơn, bởi vì mỗi lần nối thêm chuỗi nó tạo ra instance mới.Khi bạn thực hiện nối nhiều chuỗi thì lớp StringBuffer xử lý nhanh và tốn ít bộ nhớ hơn.
3)Lớp String ghi đề phương thức equals() của lớp Object. Vì thế bạn có thể so sánh nội dung của 2 chuỗi bằng phương thức equals().Lớp StringBuffer không ghi đề phương thức equals() của lớp Object.

Test hiệu suất của String và StringBuffer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class ConcatTest {
 public static String concatWithString() {
  String t = "Java";
  for (int i = 0; i < 10000; i++) {
   t = t + "Hello";
  }
  return t;
 }
 public static String concatWithStringBuffer() {
  StringBuffer sb = new StringBuffer("Java");
  for (int i = 0; i < 10000; i++) {
   sb.append("Hello");
  }
  return sb.toString();
 }
 public static void main(String[] args) {
  long startTime = System.currentTimeMillis();
  concatWithString();
  System.out.println("Thời gian nối chuỗi của lớp String: "
    + (System.currentTimeMillis() - startTime) + "ms");
  startTime = System.currentTimeMillis();
  concatWithStringBuffer();
  System.out.println("Thời gian nối chuỗi của lớp StringBuffer: "
    + (System.currentTimeMillis() - startTime) + "ms");
 }
}

Output:

Thời gian nối chuỗi của lớp String: 350ms
Thời gian nối chuỗi của lớp StringBuffer: 1ms

Test HashCode của String và StringBuffer

Trong ví dụ sau, String trả về giá trị hashcode mới khi nối chuỗi, nhưng StringBuffer trả về cùng 1 giá trị.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class InstanceTest {
 public static void main(String args[]) {
  System.out.println("Test Hashcode của String:");
  String str = "java";
  System.out.println(str.hashCode());
  str = str + "viettuts";
  System.out.println(str.hashCode());
  System.out.println("Test Hashcode của StringBuffer:");
  StringBuffer sb = new StringBuffer("java");
  System.out.println(sb.hashCode());
  sb.append("viettuts");
  System.out.println(sb.hashCode());
 }
}

Output:

Test Hashcode của String:
3254818
-1456864636
Test Hashcode của StringBuffer:
366712642
366712642

Trả lời