我对这里的基础知识感到困惑。自从我开始使用 java 以来,我总是被告知“不要使用 == 进行字符串比较;总是使用 equals”。现在我已经开始为 OCJP 学习并遇到了一些令人困惑的问题。
1)
String s1 = "Monday";
String s2 = "Monday";
s1 == s2 返回真;
2)假设一个类定义如下:
class Friend {
String name;
Friend(String n){
this.name = n;
}
public boolean equals(Object o){
return ((Friend) o).name == this.name;
}
}
我创建了两个对象的实例:
Friend f1 = new Friend("1");
Friend f2 = new Friend("1");
f1.equals(f2)
将返回真
3)最后,我定义了主方法的 MyClass:
public static void main(String[] args) {
System.out.println(args[0] == "x");
}
调用java MyClass x
false 后将被打印。
1、2、3有什么区别?当两个字符串明显引用不同的对象时,为什么在情况 1 和 2 中不返回 false?