けんつの煽られ駆動開発記

何か作るときは大抵誰かに煽られた時です。

javaにおけるオブジェクトの同一性と等値性

これは大抵のコンパイルを必要とする言語でよくある?やつ

 

javaではString型の比較で==演算子を使うと正しく評価されないという

 

初心者向けの入門書によく書いているあれ

 

 

ざっくり言えば

 

==は同一性を指す

 

つまりオブジェクトが同じかどうか

 

じゃあ、等値性ってなによってなるけど

これもざっくり答えると

 

equalsは等値性を指す

 

等値性は==ほど厳密ではなくニュアンスでいうなら「意味的に正しい」

 

String hello = "hello";

String world = "hello";

 

例えば上のような奇妙なコードがあったとしよう

 

これを==で評価するとStringクラスのhelloとworldという同じではないオブジェクトなので偽になる

 

しかしequalsメソッドを用いるとオブジェクトは違っても2つの参照型変数は同じ値を格納しているので真となる

 

これがオブジェクトの同一性と等値性

 

文字列以外でequalsを使って評価したいならinstanceofとか使うと実装できる