Câu hỏi đặt ra sôi xuống mã này:Thực tập chuỗi Java, điều gì được đảm bảo?
// setup
String str1 = "some string";
String str2 = new String(str1);
assert str1.equals(str2);
assert str1 != str2;
String str3 = str2.intern();
// question cases
boolean case1 = str1 == "some string";
boolean case2 = str1 == str3;
Liệu tiêu chuẩn Java đưa ra bất cứ đảm bảo về giá trị của case1
và case2
? Liên kết đến một phần liên quan của đặc tả Java sẽ là tốt đẹp, tất nhiên.
Có, tôi đã xem tất cả "Câu hỏi tương tự" do SO tìm thấy và không tìm thấy bản sao nào, vì không có gì tôi tìm thấy đã trả lời câu hỏi theo cách này. Và không, đây không phải là ý tưởng sai lầm về việc so sánh chuỗi "tối ưu hóa" bằng cách thay thế equals
bằng ==
.
Nếu nó không phải là một nỗ lực tối ưu hóa vô dụng, nó là gì? –
@dystroy Trường hợp cụ thể mà tôi đã có về việc sử dụng tên tệp đã được chuẩn hóa để đồng bộ hóa và nếu chuỗi nội bộ được an toàn cho mục đích, hoặc nếu một 'Map fileNameToLockObjectMap' được chia sẻ sẽ là cần thiết. Không chắc chắn, tôi đã sử dụng Bản đồ trong trường hợp đó (và sẽ không quay lại thay đổi). –
hyde
Khóa trên các chuỗi nội bộ không phải là một ý tưởng hay. Rất có thể bạn sẽ có những hậu quả không mong muốn. –