関係式は、関係演算子で結合された式です。関係演算子の「関係」という言葉の意味は、あるデータと別のデータの関係を指しますが、この関係が成立する場合と成立しない場合は、論理値で表すことができる 2 つの場合のみです。論理的に true と falseは で表されます。 数字の 1 と 0 が表されます。関係が成立する場合、式の結果は true (または 1) となり、そうでない場合、式の結果は false (または 0) になります。表 1 に、比較演算子の意味とその適用例を示します。
オペレーター | 意味 | 説明する | 例 | 結果 |
---|---|---|---|---|
> | 「より大きい」演算子 | 左側と右側のオペランドのみが数値型です。前の変数の値が次の変数の値より大きい場合、true を返します。 | 2>3 | 間違い |
>= | 以上の演算子 | 左側と右側のオペランドのみが数値型です。前の変数の値が次の変数の値以上である場合に true を返します。 | 4>=2 | 真実 |
< | 「未満」演算子 | 左側と右側のオペランドのみが数値型です。前の変数の値が次の変数の値より小さい場合、true を返します。 | 2<3 | 真実 |
<= | 以下演算子 | 左側と右側のオペランドのみが数値型です。前の変数の値が次の変数の値以下の場合に true を返します。 | 4<=2 | 間違い |
== | 等価演算子 | 比較する 2 つのオペランドが両方とも数値型の場合、データ型が同じかどうかに関係なく、値が等しい限り true が返されます。 両方のオペランドが参照型の場合、2 つの参照変数の型が親子関係にある場合にのみ比較でき、2 つの参照が同じオブジェクトを指していない限り true が返されます。 Java は2 つのブール値の比較もサポートしています。 |
4==4 97==’a’ 5.0==5 true==false |
真実 真実 真実 間違い |
!= | 不等演算子 | 比較される 2 つのオペランドが両方とも数値型の場合、データの種類が同じかどうかに関係なく、値が等しくない限り true を返します。 両方のオペランドが参照型の場合、2 つの参照変数の型が親子関係にある場合にのみ比較でき、2 つの参照が同じオブジェクトを指していない限り true が返されます。 |
4!=2 | 真実 |
注意点は以下の通りです。
- 基本型の変数および値は == を使用して参照型の変数および値と比較できません; ブール型の変数および値は == を使用して他の型の変数および値と比較できません; 親が存在しない場合2 つの参照型間の子と子が継承関係にある場合、それらの変数は == を使用して比較できません。
- == と != は、基本データ型と参照型に適用できます。参照型の比較に使用される場合、2 つの参照が同じオブジェクトを指しているかどうかが比較されますが、そのときの実際の開発プロセスでは、オブジェクトの内容が等しいかどうかを比較するだけで、比較は行われないことがほとんどです。それらが同じオブジェクトであるかどうかを比較する必要があります。
関係演算子の優先順位は次のとおりです。 >、<、>=、<= は同じ優先順位を持ち、同じ優先順位を持つ !=、== よりも高くなります。関係演算子の優先順位は代入演算子より高く、算術演算子より低く、結合方向は左から右です。
関係式は通常、Javaプログラムの論理判定文の条件式に使用されます。関係式を使用する場合は、次の点に注意してください。
- 演算子 >=、==、! =、<=は2文字からなる演算子であり、スペースで区切って記述すると構文エラーとなります。たとえば、
x> =y;
は誤りですが、x >= y;
と書くことができ、演算子の両側にスペースを追加すると読みやすくなります。また、=>、=<、=! などの演算子を逆にすると、構文エラーが発生します。 - コンピュータに保存されている実数と実際の実数の間には一定の誤差があるため、浮動小数点数を == (等しい) または != (等しくない) で比較すると、誤った結果が生じやすくなり、できる限り避けるべきです。
- 「==」を「=」と書かないでください。
関係演算子を使用した例をいくつか示します。
a > b // 変数aの値が変数bの値より大きいかどうかを比較する
x+y>=z // 変数xと変数yの和が変数zの値以上かどうかを比較する
width*width+size!=area // 変数widthの2乗に変数sizeの値を加えたものが変数areaの値と等しくないかどうかを比較する
name=="zhht" // 変数nameの値が文字列"nzht"と等しいかどうかを比較する
pass!="123456" // 変数passの値が文字列"123456"と等しくないかどうかを比較する
例1
ユーザーがキーボードから 2 つの数値を入力し、2 つの数値の間の大小を判断できるようにプログラムを作成します。実装コードは次のとおりです。
public static void main(String[] args) {
int number1, number2; // 変数を定義し、2つの入力数を保存する
System.out.print("最初の整数を入力してください(number1):");
Scanner input = new Scanner(System.in);
number1 = input.nextInt(); // 最初の数を入力
System.out.print("2番目の整数を入力してください(number2):");
input = new Scanner(System.in);
number2 = input.nextInt(); // 2番目の数を入力
System.out.printf("number1=%d,number2=%d\n", number1, number2); // これらの数を出力
// ユーザーが入力した2つの数が等しいかどうかを確認する
if (number1 == number2) {
System.out.println("number1 と number2 は等しいです。");
}
// ユーザーが入力した2つの数が等しくない場合
if (number1 != number2) {
System.out.println("number1 と number2 は等しくありません。");
// 数1が数2よりも大きいかどうかをチェックする
if (number1 > number2) {
System.out.println("number1 は number2 よりも大きいです。");
}
// 数1が数2よりも小さいかどうかをチェックする
if (number1 < number2) {
System.out.println("number1 は number2 よりも小さいです。");
}
}
}
このプログラムでは、input.nextInt() を使用してユーザーがキーボードから入力した 2 つの数値を受け取り、関係演算子を使用して 2 つの数値の大小を比較します。ここでは、フロー制御ステートメントである if ステートメントが使用されています。これについては、次の章で詳しく説明します。