これは大抵のコンパイルを必要とする言語でよくある?やつ
javaではString型の比較で==演算子を使うと正しく評価されないという
初心者向けの入門書によく書いているあれ
ざっくり言えば
==は同一性を指す
つまりオブジェクトが同じかどうか
じゃあ、等値性ってなによってなるけど
これもざっくり答えると
equalsは等値性を指す
等値性は==ほど厳密ではなくニュアンスでいうなら「意味的に正しい」
String hello = "hello";
String world = "hello";
例えば上のような奇妙なコードがあったとしよう
これを==で評価するとStringクラスのhelloとworldという同じではないオブジェクトなので偽になる
しかしequalsメソッドを用いるとオブジェクトは違っても2つの参照型変数は同じ値を格納しているので真となる
これがオブジェクトの同一性と等値性
文字列以外でequalsを使って評価したいならinstanceofとか使うと実装できる