この記事の要点
• 演算子は算術・比較・論理・代入の4カテゴリ
• &&(AND)と ||(OR)は短絡評価される
• ++(インクリメント)は前置と後置で挙動が異なる
このシリーズについて
「Java入門」シリーズ第4回。変数を宣言できるようになったので、次は変数を使った計算や比較を学びます。
前提条件: Java入門 #3 - 変数とデータ型 が完了し、
int,double,booleanの変数を扱える。
演算子とは
演算子は値を操作するための記号です。足し算の + や、比較の == などがこれに当たります。
| カテゴリ | 用途 | 代表例 |
|---|---|---|
| 算術演算子 | 数値の計算 | +, -, *, /, % |
| 比較演算子 | 大小・等価の判定 | ==, !=, <, > |
| 論理演算子 | 真偽値の結合 | &&, ` |
| 代入演算子 | 変数への値の格納 | =, +=, -= |
| インクリメント/デクリメント | 1増減 | ++, -- |
算術演算子
数値の計算に使います。
| 演算子 | 意味 | 例 | 結果 |
|---|---|---|---|
+ | 加算 | 5 + 3 | 8 |
- | 減算 | 5 - 3 | 2 |
* | 乗算 | 5 * 3 | 15 |
/ | 除算 | 10 / 3 | 3(整数同士なら商のみ) |
% | 剰余(余り) | 10 % 3 | 1 |
実例
// Java 21 で動作確認済み
public class ArithmeticExample {
public static void main(String[] args) {
int a = 10;
int b = 3;
System.out.println("a + b = " + (a + b)); // 13
System.out.println("a - b = " + (a - b)); // 7
System.out.println("a * b = " + (a * b)); // 30
System.out.println("a / b = " + (a / b)); // 3(整数除算)
System.out.println("a % b = " + (a % b)); // 1(余り)
// 小数を含む計算
double x = 10.0;
double y = 3.0;
System.out.println("x / y = " + (x / y)); // 3.3333...
}
}
注意: 整数同士の除算は小数部分が切り捨てられます。`10 / 3` は `3.33...` ではなく `3` になります。小数を得たい場合は、どちらか一方を `double` にしてください。
比較演算子
2つの値を比較して、true または false を返します。
| 演算子 | 意味 | 例 | 結果 |
|---|---|---|---|
== | 等しい | 5 == 5 | true |
!= | 等しくない | 5 != 3 | true |
< | より小さい | 3 < 5 | true |
> | より大きい | 5 > 3 | true |
<= | 以下 | 5 <= 5 | true |
>= | 以上 | 3 >= 5 | false |
実例
// Java 21 で動作確認済み
public class ComparisonExample {
public static void main(String[] args) {
int age = 20;
System.out.println("age == 20: " + (age == 20)); // true
System.out.println("age != 20: " + (age != 20)); // false
System.out.println("age < 18: " + (age < 18)); // false
System.out.println("age >= 18: " + (age >= 18)); // true
}
}
ポイント: 等価判定は==(2つ)です。`=`(1つ)は代入演算子なので、間違えると意図しない動作になります。
論理演算子
複数の条件を組み合わせるときに使います。
| 演算子 | 意味 | 例 | 結果 |
|---|---|---|---|
&& | AND(かつ) | true && false | false |
| ` | ` | OR(または) | |
! | NOT(否定) | !true | false |
真理値表
| A | B | A && B | A || B | !A |
|---|---|---|---|---|
| true | true | true | true | false |
| true | false | false | true | false |
| false | true | false | true | true |
| false | false | false | false | true |
実例
// Java 21 で動作確認済み
public class LogicalExample {
public static void main(String[] args) {
int age = 20;
boolean hasLicense = true;
// ANDの例: 18歳以上かつ免許あり
boolean canDrive = (age >= 18) && hasLicense;
System.out.println("Can drive: " + canDrive); // true
// ORの例: 学生または高齢者
boolean isStudent = false;
boolean isSenior = false;
boolean hasDiscount = isStudent || isSenior;
System.out.println("Has discount: " + hasDiscount); // false
// NOTの例
System.out.println("Not student: " + !isStudent); // true
}
}
短絡評価(short-circuit)
&& と || は左から順に評価し、結果が確定した時点で右側を評価しません。
int x = 0;
boolean result = (x != 0) && (10 / x > 5); // 左が false なので右は評価されない(0除算にならない)
TIPS: 短絡評価を利用すると、nullチェックと処理を1行で書けます。`if (obj != null && obj.isValid())` のように、左で安全確認してから右で操作します。
代入演算子
変数に値を代入します。
| 演算子 | 意味 | 例 | 同じ意味 |
|---|---|---|---|
= | 代入 | x = 5 | — |
+= | 加算代入 | x += 3 | x = x + 3 |
-= | 減算代入 | x -= 3 | x = x - 3 |
*= | 乗算代入 | x *= 3 | x = x * 3 |
/= | 除算代入 | x /= 3 | x = x / 3 |
%= | 剰余代入 | x %= 3 | x = x % 3 |
実例
// Java 21 で動作確認済み
public class AssignmentExample {
public static void main(String[] args) {
int score = 50;
score += 10; // score = score + 10; と同じ
System.out.println("Score: " + score); // 60
score *= 2;
System.out.println("Score: " + score); // 120
score /= 4;
System.out.println("Score: " + score); // 30
}
}
インクリメント・デクリメント
1増やす(++)、1減らす(--)の専用演算子です。
| 演算子 | 意味 | 例 | 結果 |
|---|---|---|---|
++x | 前置インクリメント | x = 5; y = ++x; | x=6, y=6 |
x++ | 後置インクリメント | x = 5; y = x++; | x=6, y=5 |
--x | 前置デクリメント | x = 5; y = --x; | x=4, y=4 |
x-- | 後置デクリメント | x = 5; y = x--; | x=4, y=5 |
前置と後置の違い
| 種類 | タイミング | 使う場面 |
|---|---|---|
前置(++x) | 先に増やして、増やした値を使う | ループカウンタなど |
後置(x++) | 元の値を使ってから、後で増やす | 配列インデックスなど |
実例
// Java 21 で動作確認済み
public class IncrementExample {
public static void main(String[] args) {
int a = 5;
int b = ++a; // a を先に6にしてから b に代入
System.out.println("a = " + a + ", b = " + b); // a = 6, b = 6
int x = 5;
int y = x++; // x の現在値(5)を y に代入してから x を6にする
System.out.println("x = " + x + ", y = " + y); // x = 6, y = 5
}
}
ポイント: 初心者のうちは、インクリメント/デクリメントは単独で使う方が安全です。`x++;` や `++x;` だけの行にすると、挙動の違いを気にせず済みます。
演算子の優先順位
複数の演算子が混在する場合、以下の順で評価されます。
| 優先度 | 演算子 | 覚え方 |
|---|---|---|
| 高 | ++, --, ! | 単項演算子 |
| ↓ | *, /, % | 乗除算 |
| ↓ | +, - | 加減算 |
| ↓ | <, >, <=, >= | 比較 |
| ↓ | ==, != | 等価 |
| ↓ | && | 論理AND |
| ↓ | ` | |
| 低 | =, +=, -=, … | 代入 |
不安な場合は括弧 () で明示しましょう。
int result = (a + b) * c; // 括弧で優先順位を明示
よくある間違い
| 間違い | 理由 | 正しい書き方 |
|---|---|---|
if (x = 5) | = は代入。比較は == | if (x == 5) |
10 / 3 → 3.33 を期待 | 整数除算は切り捨て | 10.0 / 3 または (double)10 / 3 |
!x > 5 | ! の優先度が高い | !(x > 5) |
x++ + ++x | 複雑すぎて予測困難 | 1行に1回だけ使う |
複数演算子の実例
// Java 21 で動作確認済み
public class CombinedOperatorsExample {
public static void main(String[] args) {
int a = 10;
int b = 3;
// 算術 + 比較 + 論理
boolean result = (a > 5) && (b < 5) && ((a % b) == 1);
System.out.println("Result: " + result); // true
// 複合代入 + インクリメント
int count = 0;
count += 5; // count = 5
count++; // count = 6
count *= 2; // count = 12
System.out.println("Count: " + count); // 12
}
}
チェックリスト
次に進む前に、以下を確認してください。
- 算術演算子(
+,-,*,/,%)を使った計算ができる - 比較演算子(
==,!=,<,>)で条件を書ける - 論理演算子(
&&,||,!)で複数条件を結合できる -
++と--の前置・後置の違いを理解した
次のステップ
Java入門 #5 - 制御構文(if文・switch文) で、条件分岐の書き方を学びます。
参考リソース
- Oracle Java Tutorials - Operators — 公式チュートリアル
- Java Operator Precedence — 演算子の優先順位一覧
- Effective Java 第3版 — Item 60: 浮動小数点演算の注意点
- IntelliJ IDEA - 式の評価