java中字符串引用的相等性

Geo*_*kov 0 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

T.J*_*der 5

m.str1m.str2指向不同的 String对象,这就是你得到的原因false.在==比较str1str2,不是 m.


旁注:现在,如果你有:

m.str1="a";
m.str2="a"; // Same series of characters, e.g., "a"
Run Code Online (Sandbox Code Playgroud)

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