1. System.out.println(sb1 == sb2);
StringChức năng bằng phương pháp trả về chỉ đúng khi đối tượng StringBuffer được so sánh với chính nó. Nó trả về false khi so sánh với bất kỳ StringBuffer nào khác, ngay cả khi cả hai chứa cùng một ký tự.
Điều này là do "==" kiểm tra sự bình đẳng tham khảo và vì cả hai SB1 và SB2 là tài liệu tham khảo đối tượng khác nhau, do sản lượng trong trường hợp này là "false"
Tuy nhiên nếu bạn muốn kiểm tra xem nội dung là bình đẳng trong hai đối tượng StringBuffer, bạn có thể sử dụng này:
sb1.toString().equals(sb2.toString())
2. System.out.println(sb1.equals(sb2));
này được đưa ra là "false" vì Equals() phương pháp chưa được ghi đè trong lớp StringBuffer. Vì vậy, nó đang sử dụng phương thức .equals() từ lớp cha "Object" của nó. Trong lớp đối tượng .equals() đã được viết để kiểm tra sự bình đẳng tham chiếu.
Lưu ý rằng sb3.equals (sb4) sẽ trả về "true" trong trường hợp String. Bởi vì phương thức .equals() đã được ghi đè trong lớp String để kiểm tra và kết hợp nội dung của hai Strings khác nhau.
Nguồn
2013-08-10 22:06:49
StringBuidler không an toàn theo như tôi biết – Yaneeve
StringBuilder không phải là chuỗi an toàn. Từ tài liệu SDK trên StringBuilder: "tương thích với StringBuffer, nhưng với ** không đảm bảo đồng bộ hóa **", từ đoạn giới thiệu tại đây: http://java.sun.com/j2se/1.5.0/docs/api/ java/lang/StringBuilder.html –
tất nhiên, xấu của tôi. đọc tài liệu của StringBuffer quá nhanh, CNTT được hỗ trợ bởi StringBuilder, do đó nó được sử dụng bởi một chuỗi đơn. xin lỗi vì chuyện đó. – mkolodziejski