Integerを"=="で比較してはいけない
追記:Javaの話です。
public class Main { public static void main(String args[]) throws Exception { Integer i1 = 1; Integer i2 = get1(); if (i1 == i2) { System.out.println("equal"); } else { System.out.println("not equal!!"); } } public static Integer get1() { // DBとかから取ってきたつもり return new Integer(1); } }
は、"not equal!!"と言われてしまいます。
(ただし、コンパイラや実行環境に依存するかもしれません。)
Integerはプリミティブ型ではないので、==
では、同一のインスタンスかどうかを確認してしまっているんですね。(たぶん
普通、比較といえば、値の同一性を知りたいと思うので、
public class Main { public static void main(String args[]) throws Exception { Integer i1 = 1; Integer i2 = get1(); if (i1.equals(i2)) { // ←ここを変えた System.out.println("equal!!"); } else { System.out.println("not equal!!"); } } public static Integer get1() { // DBとかから取ってきたつもり return new Integer(1); } }
まぁ、こうしますよね。
ただ、上記の場合は i1
がnullの場合はNullPointerExceptionが発生します。当たり前ですね。
なので、 i1
が必ずnullでは無い場合にしか使えないです。
nullの場合、一致とみなすか、不一致とみなすかは文脈によるかと思いますので、割愛します。
org.apache.commons.lang.ObjectUtils.equals
を利用するのも手ですね。
8/10追記 java.util.Objects.equals ってのがJava7からあるみたいです。(コメントで教えていただきました。)
ちゃんと考えれば当たり前なんですが、誰かの書いたコードで、ぼんやり読んでるとハマりますね。(というか、ハマりました。