演算子
演算子は変数や値に対して操作を実行するために使用されます。このレッスンでは、Javaの various 演算子を学びます。
算術演算子
| 演算子 | 説明 | 例 | 結果 |
|---|---|---|---|
+ |
加算 | 5 + 3 |
8 |
- |
減算 | 5 - 3 |
2 |
* |
乗算 | 5 * 3 |
15 |
/ |
除算 | 5 / 3 |
1(整数除算) |
% |
剰余 | 5 % 3 |
2 |
++ |
インクリメント | i++ |
iが1増加 |
-- |
デクリメント | i-- |
iが1減少 |
例:算術演算
JAVA
public class ArithmeticDemo {
public static void main(String[] args) {
int a = 10, 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 c = 10.0, d = 3.0;
System.out.println("c / d = " + (c / d)); // 3.3333...
}
}
⚠️ 整数除算: 2つの整数を割ると、結果も整数となり、小数点以下は切り捨てられます。小数点以下の結果を得るには、少なくとも1つのオペランドが浮動小数点数でなければなりません。
インクリメントとデクリメント
JAVA
int i = 5;
// 後置インクリメント:先に使用してから増加
int a = i++; // a = 5, i = 6
// 前置インクリメント:先に増加してから使用
int b = ++i; // b = 7, i = 7
代入演算子
| 演算子 | 説明 | 例 | 等価 |
|---|---|---|---|
= |
代入 | a = 5 |
— |
+= |
加算して代入 | a += 3 |
a = a + 3 |
-= |
減算して代入 | a -= 3 |
a = a - 3 |
*= |
乗算して代入 | a *= 3 |
a = a * 3 |
/= |
除算して代入 | a /= 3 |
a = a / 3 |
%= |
剰余を代入 | a %= 3 |
a = a % 3 |
例:代入演算
JAVA
public class AssignmentDemo {
public static void main(String[] args) {
int a = 10;
System.out.println("初期値: " + a); // 10
a += 5;
System.out.println("a += 5: " + a); // 15
a -= 3;
System.out.println("a -= 3: " + a); // 12
a *= 2;
System.out.println("a *= 2: " + a); // 24
a /= 4;
System.out.println("a /= 4: " + a); // 6
a %= 4;
System.out.println("a %= 4: " + a); // 2
}
}
比較演算子
比較演算子はブール値(trueまたはfalse)を返します。
| 演算子 | 説明 | 例 | 結果 |
|---|---|---|---|
== |
等しい | 5 == 5 |
true |
!= |
等しくない | 5 != 3 |
true |
> |
大なり | 5 > 3 |
true |
< |
小なり | 5 < 3 |
false |
>= |
以上 | 5 >= 5 |
true |
<= |
以下 | 5 <= 3 |
false |
例:比較演算
JAVA
public class ComparisonDemo {
public static void main(String[] args) {
int a = 10, b = 20;
System.out.println("a == b: " + (a == b)); // false
System.out.println("a != b: " + (a != b)); // true
System.out.println("a > b: " + (a > b)); // false
System.out.println("a < b: " + (a < b)); // true
System.out.println("a >= 10: " + (a >= 10)); // true
System.out.println("a <= 5: " + (a <= 5)); // false
}
}
論理演算子
| 演算子 | 説明 | 例 | 結果 |
|---|---|---|---|
&& |
論理積 | true && false |
false |
|| |
論理和 | true || false |
true |
! |
論理否定 | !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
public class LogicDemo {
public static void main(String[] args) {
int age = 25;
boolean hasID = true;
// 年齢が18歳以上でIDを持っている
boolean canEnter = (age >= 18) && hasID;
System.out.println("入場可能: " + canEnter); // true
// 年齢が12歳未満または60歳超
boolean isSpecial = (age < 12) || (age > 60);
System.out.println("特別カテゴリ: " + isSpecial); // false
// 論理否定
boolean isAdult = age >= 18;
System.out.println("成人: " + isAdult); // true
System.out.println("成人ではない: " + !isAdult); // false
}
}
💡 短絡評価:
&&は左辺がfalseの場合に停止し、||は左辺がtrueの場合に停止します。これらのケースでは右辺は評価されません。
三項演算子
三項演算子はif-elseの短縮形です。
JAVA
// 構文: 条件 ? 値1 : 値2
int max = (a > b) ? a : b;
例:三項演算子
JAVA
public class TernaryDemo {
public static void main(String[] args) {
int a = 10, b = 20;
// 最大値を見つける
int max = (a > b) ? a : b;
System.out.println("最大値: " + max); // 20
// 奇数か偶数かを確認
int num = 7;
String result = (num % 2 == 0) ? "偶数" : "奇数";
System.out.println(num + "は" + result); // 7は奇数
// 絶対値
int x = -5;
int abs = (x >= 0) ? x : -x;
System.out.println("絶対値: " + abs); // 5
}
}
演算子の優先順位
優先順位の高い演算子が最初に評価されます。優先順位を変更するには括弧を使用します。
| 優先順位 | 演算子 | 説明 |
|---|---|---|
| 1 | () |
括弧 |
| 2 | ! ++ -- |
単項演算子 |
| 3 | * / % |
乗算、除算、剰余 |
| 4 | + - |
加算、減算 |
| 5 | < <= > >= |
比較 |
| 6 | == != |
等価 |
| 7 | && |
論理積 |
| 8 | || |
論理和 |
| 9 | ?: |
三項演算子 |
| 10 | = += -= など |
代入 |
例:優先順位
JAVA
public class PrecedenceDemo {
public static void main(String[] args) {
// 乗算は加算より優先順位が高い
int result1 = 2 + 3 * 4;
System.out.println("2 + 3 * 4 = " + result1); // 14、20ではない
// 括弧を使用して優先順位を変更
int result2 = (2 + 3) * 4;
System.out.println("(2 + 3) * 4 = " + result2); // 20
}
}
💡 ヒント: 複雑な式では括弧を使用して可読性を高め、優先順位のエラーを避けてください。
型昇格
異なる型の値が演算で混在する場合、小さい型は自動的に大きい型に昇格されます。
JAVA
public class TypePromotion {
public static void main(String[] args) {
// int + long → long
int a = 10;
long b = 20;
long c = a + b;
// int + double → double
int d = 10;
double e = 3.14;
double f = d + e;
// byte + byte → int
byte g = 10;
byte h = 20;
// byte i = g + h; // エラー!結果はint型
int i = g + h; // 正しい
}
}
❓ よくある質問
Q ==とequalsの違いは何ですか?
A ==はプリミティブの値を比較し、参照のアドレスを比較します。equalsはオブジェクトの内容を比較します。文字列の比較にはequalsを使用してください。
Q i++と++iの違いは何ですか?
A i++は値を先に使用してから増加し、++iは先に増加してから使用します。単独で使用した場合、効果は同じです。違いは式内でのみ重要です。
Q なぜ0.1 + 0.2 != 0.3なのですか?
A 浮動小数点数には精度の問題があります。0.1と0.2はバイナリで正確に表現できません。浮動小数点値の比較には範囲比較を使用してください。
📖 まとめ
- 算術演算子: + - * / % ++ --
- 代入演算子: = += -= *= /= %=
- 比較演算子: == != > < >= <=
- 論理演算子: && || !
- 三項演算子: 条件 ? 値1 : 値2
- 演算子には優先順位があり、複雑な式では括弧を使用
- 型昇格: 小さい型は自動的に大きい型に昇格
📝 演習
- 算術練習: 秒数を入力し、「X時間X分X秒」形式に変換
- 比較練習: 年がうるう年かどうかを判定(4で割り切れるが100で割り切れない、または400で割り切れる)
- 三項練習: 3つの数を入力し、三項演算子を使用して最大値を見つける
次のレッスン
次のレッスンでは、条件文を学びます — プログラムで判断を行います。



