Javaオブジェクトの比較
Contents
== ではなく Objects.equals を使う
オブジェクトの比較をする場合限定ですが、==で比較するのではなく、Objects.equals(obj1, obj2)として比較するようにしましょう。
理由は、処理の最中にオブジェクトのポインタ(メモリ上の番地)が変わってしまった場合でも、 格納されている値同士で比較できるためです。
if (Objects.equals(obj1, obj2)) {
// 処理
}
サンプルは以下の通りです。XXXXXXXXが出力されます。
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
// Your code here!
Integer obj1 = 1;
Integer obj2 = 1;
if (Objects.equals(obj1, obj2)) {
System.out.println("XXXXXXXX");
}
}
}
Integer型はオブジェクト型です。上記コードを確認するためには、ここ。
参考サイト https://qiita.com/riekure/items/7348a600e18b7d6d0f72
nullのバリデーションチェックにはObjects.isNull(obj) を使う
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Integer num = null;
//正解
if (Objects.isNull(num)){
// nullのときの処理
System.out.println("nullです");
}
//不正解
if (num == null) {
// nullのときの処理
System.out.println("nullだよーん");
}
}
}
int型はプリミティブ型なので、オブジェクト型であるInteger型を使います。
上記コードを手っ取り早く確認するためには、ここ。
num == nullではいけない理由
上と同じ理由です。処理の最中にオブジェクトのポインタ(メモリ上の番地)が変わってしまう場合があっても、格納されている値同士で比較することができるためです。 このため obj == null よりも Objects.isNull(obj) の方が好ましいということです。
