Trong Java, String
, StringBuffer
, và StringBuilder
đều được sử dụng để xử lý chuỗi nhưng có những khác biệt quan trọng về tính năng và hiệu suất. Dưới đây là một số điểm khác nhau chính giữa chúng:
String
được tạo ra, nó không thể bị thay đổi. Nếu bạn thực hiện các thao tác như nối chuỗi, một đối tượng String
mới sẽ được tạo ra.String
không thể thay đổi, việc thực hiện nhiều thao tác nối chuỗi sẽ tốn thời gian và bộ nhớ vì phải tạo ra nhiều đối tượng mới.StringBuffer
cho phép thay đổi nội dung của chuỗi mà không cần tạo ra một đối tượng mới.StringBuffer
là đồng bộ hóa, do đó, nó an toàn cho việc sử dụng trong môi trường đa luồng.String
khi thực hiện nhiều thao tác thay đổi chuỗi, nhưng có thể chậm hơn StringBuilder
vì tính đồng bộ hóa.StringBuffer
, StringBuilder
cũng cho phép thay đổi nội dung của chuỗi mà không cần tạo ra đối tượng mới.StringBuilder
không đồng bộ hóa, do đó nhanh hơn StringBuffer
trong các thao tác một luồng.Đặc điểm | String | StringBuffer | StringBuilder |
---|---|---|---|
Tính chất | Immutable | Mutable | Mutable |
Đồng bộ hóa | Không | Có | Không |
Hiệu suất | Chậm khi thay đổi | Tốt hơn String | Tốt nhất cho đơn luồng |
Sử dụng | Hằng số, không thay đổi | An toàn đa luồng | Không an toàn đa luồng |
// Sử dụng String String str = "Hello"; str += " World"; // Tạo ra một đối tượng String mới // Sử dụng StringBuffer StringBuffer stringBuffer = new StringBuffer("Hello"); stringBuffer.append(" World"); // Thay đổi trực tiếp nội dung // Sử dụng StringBuilder StringBuilder stringBuilder = new StringBuilder("Hello"); stringBuilder.append(" World"); // Thay đổi trực tiếp nội dung
String
khi bạn cần chuỗi không thay đổi.StringBuffer
khi cần đảm bảo an toàn trong môi trường đa luồng.StringBuilder
khi bạn cần hiệu suất tốt nhất trong môi trường đơn luồng.