查询关于以下代码段

时间:2015-10-12 05:24:02

标签: java string

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会变错?据我说它应该是真的。有人可以解释一下

3 个答案:

答案 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内存位置。这里,s3s4使用不同的内存位置。

如果您想比较String的值,则应使用s3.equals(s4)。这将导致真实的情况。

答案 2 :(得分:-1)

这是因为您在字符串上使用==运算符。 永远不要在字符串上使用==运算符。使用==运算符时,您将比较两个字符串的内存位置。这两个字符串位于不同的位置。这就是两个字符串不“平等”的原因。

解决此问题的方法是使用equals方法。 String类重写该方法,使其比较两个字符串的相等性。所以你的代码应该是这样的:

if(s3.equals(s4)){
    System.out.println("true");
} else {
    System.out.println("false");
}