Java字符串实习,有什么保证?
该问题归结为以下代码:
// 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的值提供任何保证? 是的,我看了所有的SO类似的问题,发现没有重复,因为我没有找到回答这个问题.不,这不是关于通过用==替换equals来“优化”字符串比较的错误的想法. 解决方法
这是你的JLS报价,Section 3.10.5:
package testPackage; class Test { public static void main(String[] args) { String hello = "Hello",lo = "lo"; System.out.print((hello == "Hello") + " "); System.out.print((Other.hello == hello) + " "); System.out.print((other.Other.hello == hello) + " "); System.out.print((hello == ("Hel"+"lo")) + " "); System.out.print((hello == ("Hel"+lo)) + " "); System.out.println(hello == ("Hel"+lo).intern()); } } class Other { static String hello = "Hello"; }
package other; public class Other { static String hello = "Hello"; }
结合JavaDoc实习生,您有足够的信息来推断您的两个案例都将返回真实. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |