java中字符串引用的相等性

时间:2013-06-09 22:23:58

标签: java string reference

你能解释一下为什么我有“假”输出?如果我理解正确,引用指向同一个对象!

public class mainC {
    String str1,str2;
    public static void main(String [] args){
        mainC m=new mainC();
        m.str1="a";
        m.str2="b";
        System.out.print("m.str1 == m.str2: "+m.str1 == m.str2);
    }
}

谢谢。

2 个答案:

答案 0 :(得分:5)

m.str1m.str2指向不同的 String个对象,这就是您获得false的原因。 ==比较str1str2 m


旁注:现在,如果你有:

m.str1="a";
m.str2="a"; // Same series of characters, e.g., "a"

......你会得到true,但这会产生误导。 ==比较对象引用。所以你可以有两个不同的String对象,它们中包含相同的字符,但它们彼此之间不会是==(事实上,这很常见)。要比较字符串,请使用equals。我上面的示例返回true的原因是两个字符串都初始化,指向 literals ,并且Java中的String文字默认为intern'd,因此具有相同字符的文字是映射到同一个对象。

答案 1 :(得分:0)

Java中的字符串实现为reference type and not a value type。既然如此,他们在内存中的指针就不一样了。要解决这个问题,you can use their equals function to compare them.