LoginSignup
0
0

More than 5 years have passed since last update.

Integerとintの等値判定

Posted at

・オフジェクトの等値判定は==ではなくequalsを使用する.等値判定が必要なクラスにはequalsが定義してある(はず).

・Stringの等値判定を==で行っているプログラムを見ることがあるが、見ていると貧血になりそうである。一応デバッグが通っている。これが動作する理由は、代入で回していればtrueとなるから.

・Integerでも同じだが、プリミティブ(int)があるので、少しだけ複雑になる.

・常識的なことも含めて確認してみる.

・結果として注意しなければならないのはInteger同士の等値判定で==を使用した場合.等値判定の時に対象の変数がIntegerかintかを一々確認したりはしない.そして大部分では==が使われる.これは危険....

・だがしかし、両方ともIntegerであるという確率は非常に少ないと思われる.よかった、よかった.

Tips0048.java
package jp.avaj.lib.algo;

import jp.avaj.lib.test.ArTest;
import jp.avaj.lib.test.L;

public class Tips0048 {
  public static void main(String[] args) {
    // テストケースを開始する
    ArTest.startTestCase("Tips0048");

    L.p("\n==== IntegerとIntegerの等値判定");
    {
      Integer i0 = new Integer(5);
      Integer i1 = i0;
      Integer i2 = new Integer(5);
      //
      // これは代入なのでtrueとなる.
      ArTest.isTrue("i0 vs i1","result",(i0 == i1));

      // これはfalse ⇒ ★これだけが危ない
      ArTest.isFalse("i0 vs i2","result",(i0 == i2));
    }
    L.p("\n==== Integerとintの等値判定");
    {
      Integer integer = new Integer(5);
      int int0 = 5;
      //
      // equalsによる判定
      ArTest.isTrue("Integer.equals(int)","result",integer.equals(int0));
      // == による判定
      ArTest.isTrue("Integer == int","result",integer == int0);
    }
    L.p("\n==== intとintの等値判定 ⇒ 省略");
    //
    L.p("\n==== IntegerとIntegerの大小判定");
    {
      Integer integer0 = new Integer(5);
      Integer integer1 = new Integer(4);
      ArTest.isTrue("Integer > Integer","result",integer0 > integer1);
    }
    L.p("\n==== Integerとintの大小判定");
    {
      Integer integer0 = new Integer(5);
      ArTest.isTrue("Integer > int","result",integer0 > 4);
    }
    L.p("\n==== intとintの大小判定 ⇒ 省略");


    L.p("\n==== 番外");
    // これら両方ともfalse。当たり前とは言え、非常に違和感がある。
    L.p((new Integer(1)).equals(new Long(1))+"");
    L.p(((new Boolean(true)) == (new Boolean(true)))+"");

    L.p("");
    // テストケースを終了する
    ArTest.endTestCase();
  }
}

実行結果は次のとおり。

**** Tips0048 start ****

==== IntegerとIntegerの等値判定
OK i0 vs i1:result=true
OK i0 vs i2:result=false

==== Integerとintの等値判定
OK Integer.equals(int):result=true
OK Integer == int:result=true

==== intとintの等値判定 ⇒ 省略

==== IntegerとIntegerの大小判定
OK Integer > Integer:result=true

==== Integerとintの大小判定
OK Integer > int:result=true

==== intとintの大小判定 ⇒ 省略

==== 番外
false
false

**** Tips0048 summary ****
test count = 6
success    = 6

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0