public static void main(String args[]) throws IOException
{
String s1="abc";
String s2="xyz";
String s3="abcxyz";
String s4=s1.concat(s2);
System.out.println(s4);
@SuppressWarnings("unused")
String s5=s1+s2;
if(s3==s4)
{
System.out.println("true");
}
else
System.out.println("false");
}
为什么o / p会变错?据我说它应该是真的。有人可以解释一下
答案 0 :(得分:-1)
java.lang.String concat()函数返回new String()对象这里s3 and s4
是指向两个不同对象的两个不同引用。
==
只检查引用,.equals()
检查实际内容。
s3.equals(s4) will return true.
来自javadoc,concat()函数。
public String concat(String str) {
int otherLen = str.length();
if (otherLen == 0) {
return this;
}
int len = value.length;
char buf[] = Arrays.copyOf(value, len + otherLen);
str.getChars(buf, len);
return new String(buf, true);
}
答案 1 :(得分:-1)
==
运算符会比较String
值以及String
内存位置。这里,s3
和s4
使用不同的内存位置。
如果您想比较String
的值,则应使用s3.equals(s4)
。这将导致真实的情况。
答案 2 :(得分:-1)
这是因为您在字符串上使用==
运算符。 永远不要在字符串上使用==运算符。使用==运算符时,您将比较两个字符串的内存位置。这两个字符串位于不同的位置。这就是两个字符串不“平等”的原因。
解决此问题的方法是使用equals
方法。 String
类重写该方法,使其比较两个字符串的相等性。所以你的代码应该是这样的:
if(s3.equals(s4)){
System.out.println("true");
} else {
System.out.println("false");
}