我想知道为什么以下代码不起作用:
String test = new String(new byte[] {92, 92, 92, 92, 92});
System.out.println(test);
String compare = "\\\\\\\\\\";
System.out.println(compare);
if (test == compare) {
System.out.println("Yes!");
}
输出结果为:
\\\\\
\\\\\
我不理解的数据类型转换在哪里?
修改: /失败:(
答案 0 :(得分:9)
将字符串与.equals()进行比较,而不是使用==
进行比较原因是使用引用(作为字符串变量),==只检查内存位置的相等性,而不是内容。
文字\\\存在于记忆中的一个地方。另一个是在你构建字符串的其他地方创建的。它们不在同一个位置,因此当你执行==
时它们不会返回true你应该做
if(test.equals(compare))
答案 1 :(得分:5)
Java中的字符串是引用类型,并且==检查它们是否是相同的字符串,而不是相等的字符串。让我感到困惑。长话短说,你需要做到这一点:
if( test.equals( compare ) ) {
有关详细信息,请参阅此处:http://leepoint.net/notes-java/data/strings/12stringcomparison.html
答案 2 :(得分:3)
您正在测试它们是否是同一个对象,而不是它们是否是相同的字符串。
然而,以下测试将成立:
test.intern() == compare.intern()
答案 3 :(得分:2)
您正在使用身份比较,而不是字符串比较。
试试test.equals(compare)
。然后尝试test.intern() == compare
。两者都应该有效。 intern
方法是在String
个对象上执行对象标识比较的唯一可靠方法。