比較演算子(関係演算子)

等価オペレータと関係演算子は、あるオペランドが他のオペランドより大きいか、小さいか、等しいか、等しくないかどうかを判断します。
これらの演算子の大部分はおそらくあなたにもよく知られています。
重要2つのプリミティブ値が等しいかどうかをテストするときは、 "="ではなく "=="を使用する必要があることに注意してください。

Orale社本家サイト演算子より引用

比較演算子一覧

Javaに用意されている比較演算子は、以下になります。

演算子 説明
== x == y 左の値は右の値と等しい場合にtrueを返し、異なる場合にはfalseを返す。
!= x != y 左の値は右の値と異なる場合にtrueを返し、等しい場合にはfalseを返す。
> x > y 左の値は右の値より大きい場合にtrueを返し、小さい又は等しい場合にはfalseを返す。
>= x >= y 左の値は右の値以上の場合にtrueを返し、小さい場合にはfalseを返す。
< x < y 左の値は右の値より小さい場合にtrueを返し、大きい又は等しい場合にはfalseを返す。
<= x <= y 左の値は右の以下の場合にtrueを返し、大きい場合にはfalseを返す。
instanceof x instanceof y 左の値は右のクラスのインスタンスの場合にtrueを返し、異なる場合にはfalseを返す。

比較演算子サンプル

比較演算子サンプル
    int x = 1;
    int y = 2;

    System.out.println(" x == y is " + ( x == y ) );
    System.out.println(" x != y is " + ( x != y ) );
    System.out.println(" x > y  is " + ( x > y ) );
    System.out.println(" x >= y is " + ( x >= y ) );
    System.out.println(" x < y  is " + ( x < y ) );
    System.out.println(" x <= y is " + ( x <= y ) );

    Object z = new Integer(3);

    System.out.println(" z instanceof Integer is " + ( z instanceof Integer ) );
    System.out.println(" z instanceof Number  is " + ( z instanceof Number ) );
    System.out.println(" z instanceof String  is " + ( z instanceof String  ) );

    String xString = new String("hoge");
    String yString = new String("hoge");
    String zString = xString;

    System.out.println(" xString == yString is " + ( xString == yString ) );
    System.out.println(" xString == zString is " + ( xString == zString ) );
    System.out.println(" xString.equals( yString ) is " + ( xString.equals( yString ) ) );
                    
実行結果
     x == y is false
     x != y is true
     x > y  is false
     x >= y is false
     x < y  is true
     x <= y is true
     z instanceof Integer is true
     z instanceof Number  is true
     z instanceof String  is false
     xString == yString is false
     xString == zString is true
     xString.equals( yString ) is true
  					

重要実行結果のポイントを整理すると

  • instanceofは、生成されたインスタンスのクラスを比較しますが、
    上記結果のように Integerそのものもtrueになりますが、Integerの親クラスNumberもtrueになります。
    Oracle社JavaAPIのIntegerクラスの段組みされた継承関係をみて下さい。
    このように、instanceofではインスタンス生成時のクラス(この場合、Integer)と比較しても、親クラスで比較してもtrueとなります。
  • String型である文字列を比較するときは、 == ではなくequalsメソッドを利用します。
    クラスのインスタンス == クラスのインスタンス の意味は参照型で示した図のように
    左と右の参照型が同一のインスタンスを指しているかという意味になります。(xString と zStringが trueになった理由)