你能解释一下为什么我有“假”输出?如果我理解正确,引用指向同一个对象!
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);
}
}
谢谢。
答案 0 :(得分:5)
m.str1
和m.str2
指向不同的 String
个对象,这就是您获得false
的原因。 ==
比较str1
和str2
,不 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.