ここで非常に基本的なことに混乱しています。Java を使い始めて以来、「文字列比較には == を使用しないでください。常に equals を使用してください」といつも言われていました。今、私は OCJP の学習を開始し、いくつかの紛らわしい点に出くわしました。
1)
String s1 = "Monday";
String s2 = "Monday";
s1 == s2 は true を返します。
2)次のように定義されたクラスがあるとしましょう:
class Friend {
String name;
Friend(String n){
this.name = n;
}
public boolean equals(Object o){
return ((Friend) o).name == this.name;
}
}
2 つのオブジェクトのインスタンスを作成します。
Friend f1 = new Friend("1");
Friend f2 = new Friend("1");
f1.equals(f2)
true を返します
3) 最後に、メイン メソッドが定義された MyClass があります。
public static void main(String[] args) {
System.out.println(args[0] == "x");
}
呼び出しの後、java MyClass x
false が出力されます。
1、2、3 の違いは何ですか? 2 つの文字列が明らかに異なるオブジェクトを参照しているのに、ケース 1 と 2 で false が返されないのはなぜですか?