Sự khác biệt trong hành vi không liên quan đến sự khác biệt giữa StringBuilder
và StringBuffer
.
Các javadoc của String#intern()
khẳng định rằng nó sẽ trả về
Khi phương pháp thực tập được gọi, nếu hồ bơi đã có chứa một chuỗi bằng đối tượng này String
được xác định bởi equals(Object)
phương pháp, sau đó chuỗi từ hồ bơi được trả về. Nếu không, đối tượng String
này được thêm vào hồ bơi và tham chiếu đến đối tượng String
này được trả về.
Các String
tạo từ
String str2 = new StringBuffer("ja").append("va").toString();
là một thương hiệu mới String
mà không thuộc về hồ bơi.
Đối
str2.intern() == str2
trở false
, cuộc gọi intern()
phải đã trở về một giá trị tham khảo khác nhau, ví dụ. số String
"java"
đã có trong hồ bơi.
Trong lần so sánh đầu tiên, String
"计算机 软件" không nằm trong nhóm chuỗi trước để gọi đến intern()
. intern()
do đó trả lại cùng một tham chiếu như được lưu trữ trong str2
. Độ cân bằng tham chiếu str2 == str2
do đó trả lại true
.
Nguồn
2015-08-14 01:38:55
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#intern() – twentylemon
xin lỗi! Tôi không hiểu điểm của bạn là gì? – side
Tại sao không? Không có lý do tại sao một trong hai người trong số họ nên trả về 'true', hoặc tại sao cả hai đều nên trả về cùng một kết quả. – EJP