比較を理解する
比較演算子は二つの値の関係を調べ、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です。通常の数値の直感だけで等価比較を一般化しないことが大切です。
図解
重要ポイント
- <と>は等しい場合false、<=と>=はtrueになる。
- ==は等しいか、!=は等しくないかを調べる。
- 数値型は必要な型へ昇格して比較する。
- 参照型の==は内容比較ではない。
間違えやすい点
- a<b<cの数学的記法をJavaへそのまま移さない。
- 代入=を等価比較==と混同しない。
- Stringの内容比較に==を使わない。
用語解説
- 関係演算子
- <、>、<=、>=のように数値の大小を調べる演算子。
- 等価演算子
- ==と!=。型に応じて値や参照を比較する。
- 境界値
- 条件が成立するか切り替わる付近の値。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
確認問題の出題・採点や学習履歴の保存にはログインが必要です。