0

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

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);
    }
}

谢谢你。

4

2 回答 2

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,并且StringJava 中的文字默认为intern'd,因此具有相同字符的文字映射到同一个对象。

于 2013-06-09T22:25:58.980 回答
0

Java 中的字符串被实现为引用类型而不是值类型。由于是这种情况,它们在内存中的指针不相等。为了解决这个问题,您可以使用它们的 equals 函数来比较它们。

于 2013-06-09T22:32:31.490 回答