比較を理解する

比較演算子は二つの値の関係を調べ、booleanのtrueまたはfalseを返します。数値の大小、境界を含むか、参照の同一性を区別し、条件として利用します。

この単元で学ぶこと

  • 大小比較と等価比較の結果を求める
  • 数値と参照の比較規則を区別する
  • 比較できない型や式を判定する

本文解説

比較結果の型 int score=80;boolean passed=score>=60;はtrueをpassedへ格納します。比較は数値80や60ではなくbooleanを返します。System.out.print(5<8);はtrueと表示され、1を返す規則ではありません。

等しいときの判定 10<10はfalse、10<=10はtrueです。以上・以下を表したい場合は等号を付け、超える・未満なら付けません。>=と=>は違い、Javaで使えるのは>=です。境界ちょうどの値を入れると記号選択の誤りを発見できます。

等価と不等価 int a=3,b=3;ではa==bがtrue、a!=bがfalseです。等しい数値の比較は一致を調べ、!=はそれを否定します。boolean同士も==や!=で比較できますが、true>falseのような大小比較はできません。

型を合わせた数値比較 5==5.0はintをdoubleへそろえて比較するためtrueです。型名が違うだけでfalseにはなりません。charの'A'==65も数値として同じコード値なのでtrueです。一方"5"==5は文字列を数値へ解析せず型が合わないためエラーです。

計算結果を比較する 7/2==3は整数商3を比較してtrueです。7.0/2==3は3.5と3を比較してfalseです。比較の左右に式があれば、先にその式の型と値を求めます。0.1+0.2==0.3は二進浮動小数点の丸めによりfalseです。

複数の範囲条件 0<=n&&n<10は下限と上限を二つのboolean比較で表します。0<=n<10は最初の比較結果booleanと10を比較しようとしてエラーです。数学で使う連続した不等号をJavaの一つの比較としては書けません。

参照の比較 int[] a={1};int[] b=a;ならa==bはtrueです。int[] b={1};なら内容が同じでも別実体なのでfalseです。Stringも==は参照を比較し、new String("x")を二つ作ればfalseです。内容を見るならStringのequalsを使います。

nullと特殊な数値 null同士の参照比較は可能ですが、nullのメソッドを呼ぶと例外です。またdoubleのNaNは数値が定まらない特殊値で、NaN==NaNはfalse、NaN!=NaNはtrueです。通常の数値の直感だけで等価比較を一般化しないことが大切です。

図解

境界10を条件にする
等号を含むかで境界ちょうどの判定が変わる。

重要ポイント

  • <と>は等しい場合false、<=と>=はtrueになる。
  • ==は等しいか、!=は等しくないかを調べる。
  • 数値型は必要な型へ昇格して比較する。
  • 参照型の==は内容比較ではない。

間違えやすい点

  • a<b<cの数学的記法をJavaへそのまま移さない。
  • 代入=を等価比較==と混同しない。
  • Stringの内容比較に==を使わない。

用語解説

関係演算子
<、>、<=、>=のように数値の大小を調べる演算子。
等価演算子
==と!=。型に応じて値や参照を比較する。
境界値
条件が成立するか切り替わる付近の値。

関連教材

参考資料

教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。

確認問題の出題・採点や学習履歴の保存にはログインが必要です。