【发布时间】:2013-01-06 15:00:24
【问题描述】:
问题归结为这段代码:
// 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;
Java 标准是否对case1 和case2 的值提供任何保证?
当然,链接到 Java 规范的相关部分会很好。
是的,我查看了 SO 找到的所有“类似问题”,但没有发现重复项,因为我发现没有人以这种方式回答问题。不,这不是关于通过将equals 替换为== 来“优化”字符串比较的错误想法。
【问题讨论】:
-
如果不是无用的优化尝试,那是什么?
-
@dystroy 我遇到的特殊情况是关于使用规范化文件名进行同步,以及用于此目的的内部字符串是否安全,或者是否需要共享
Map<String, Object> fileNameToLockObjectMap。不确定,在那种情况下我最终使用了地图(并且不会回去更改)。 -
锁定实习字符串不是一个好主意。您很可能会产生意想不到的后果。
-
@PeterLawrey 我同意,如果不确定,请采取安全路线。但是你能想到其他这样的后果,除了在程序的完全不相关的部分中使用相同的实习 String 实例吗?如果这些字符串不用于锁定别处,并且假设没有库使用这种丑陋的技巧,你能想到意想不到的后果吗?
标签: java string string-interning