Javaオブジェクトの比較

6月 16, 2020

== ではなく 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) の方が好ましいということです。

Java

Posted by パソコンの先生