Java Silver SE17を勉強している アオイです。
第3章「演算子と制御構文」について、理解に苦労した部分も多かったのですが、理解した内容をまとめています。
演算子や制御構文はプログラムの基礎でありながら細かいルールや誤りやすいポイントも多いので、しっかり押さえておきたいところ。
合格まで一緒に頑張りましょう!
演算子
Javaの演算子はプログラムを書く上で必須の要素ですよね。
主に算術演算子(+, -, *, /, %)、比較演算子(==, !=, >, <, >=, <=)、論理演算子(&&, ||, !)の3種類がよく使われます。
複数の演算子がある式では「演算子の優先順位」と「結合規則」に従って計算されます。
演算子の優先順位(高 → 低)
| 優先順位 | 演算子 | 内容 |
|---|---|---|
| 1 | () | 括弧(グループ化) |
| 2 | [], . | 配列アクセス、メンバアクセス |
| 3 | ++(後置), --(後置) | 後置インクリメント、デクリメント |
| 4 | ++(前置), --(前置), +(正号), -(負号), !, ~ | 単項演算子(前置インクリメント等、論理否定、ビット否定) |
| 5 | *, /, % | 乗算、除算、剰余 |
| 6 | +, - | 加算、減算 |
| 7 | <<, >>, >>> | ビットシフト演算子 |
| 8 | <, <=, >, >=, instanceof | 関係演算子(大小比較、型チェック) |
| 9 | ==, != | 等価演算子、非等価演算子 |
| 10 | & | ビットAND |
| 11 | ^ | ビットXOR |
| 12 | ` | ` |
| 13 | && | 論理AND |
| 14 | ` | |
| 15 | ?: | 三項演算子 |
| 16 | =, +=, -=, *=, /=, %= 等 | 代入演算子、複合代入演算子 |
- 優先順位が高い演算子が先に実行され、同じ優先順位の演算子が並んでいる場合は「結合規則」(左から右、あるいは右から左)に従う
- 例えば、
10 + 5 * 4は掛け算(*)が加算(+)より優先されるため、5 * 4が先に計算され、結果は30となる - 括弧
()は最も優先されるので、(10 + 5) * 4のように括弧内の計算が先に行われる
さらに型変換にも注意が必要です。
- 演算子の左右の型が異なる場合、小さい方から大きい方へ自動的に変換される
- ただし、boolean型は演算に使えず、使うと必ずコンパイルエラーになる
例:
int a = 10, b = 3;
int result = 10 + 5 * 4; // 30
int result2 = (10 + 5) * 4; // 60
boolean flag = (a > b) && (b > 0); // true
アオイ演算子の優先順位を覚えてないと計算結果を求められる問題が解けないので、しっかり押さえておくこと!
分岐文
プログラムの流れを条件で分けるための文がif文です。基本はif、条件が複数ある場合にはif-else、elseで場合分けします。
- 条件式は必ずboolean型にすること、boolean以外の型を条件にするとコンパイルエラー
- 条件が
trueの場合に中括弧{}内の処理が実行される
例:
int score = 85;
if(score >= 90) {
System.out.println("優秀");
} else if(score >= 70) {
System.out.println("合格");
} else {
System.out.println("不合格");
}



試験では、条件式の中をよく見てどこが処理されるのかに注目!
繰り返し文
同じ処理を繰り返すときに使うのがfor文、while文、do-while文です。
- for文は繰り返す回数が決まっている場合に利用する
- while文は条件が
trueの間繰り返し処理を続け、ループ前に条件を判定する - do-while文は少なくとも一回は処理を実行し、そのあとに条件を判定するため、必ず一回はループ本体が実行される。
例:
for(int i = 0; i < 5; i++) {
System.out.println(i);
}
int j = 0;
while(j < 5) {
System.out.println(j);
j++;
}
int k = 0;
do {
System.out.println(k);
k++;
} while(k < 5);



while文は条件がfalseの場合、処理が全く実行されずに終了しますが、それはコンパイルエラーにはなりません!
break, continueを使用した制御
breakはループやswitch処理を途中で抜け出す際に使います。continueはループの現在の反復処理をスキップして、次の繰り返しに進みます。
例:
for(int i = 0; i < 10; i++) {
if(i == 5) break; // iが5のときループを抜ける
if(i % 2 == 0) continue; // 偶数はスキップ
System.out.println(i); // 奇数のみ表示
}
【抑えておくべきポイント】breakやcontinueはループの流れを大きく変えるので意図を明確にしないとバグのもと。



breakはループを抜ける、continueは以降の処理をスキップ、意味と動きを覚える!
switch文とswitch式
従来のswitch文
caseで処理を分け、case最後にbreakを置いて処理を中断させる。breakを書かないと次のcaseへ処理が続く「フォールスルー」が起こるので注意が必要。defaultはすべてのcaseに該当しない場合の処理で省略可能。- 試験ではよく
break忘れによる意図しないフォールスルーが問われるので要注意。
例:
int day = 3;
switch(day) {
case 1:
System.out.println("Monday");
case 2:
System.out.println("Tuesday");
case 3:
System.out.println("Wednesday");
default:
System.out.println("Error");
}
day = 3の場合、Wednesdayの後にErrorも出力されます。



出力結果を求められたら、breakがあるか、なければフォールスルーした結果となる!
Java SE17のswitch式
- switch式は値を返す式として使い、変数に代入可能。
caseは矢印(->)やyieldで値を返す。- フォールスルー効果はなく、
breakも不要。 - すべての
caseを網羅しないとコンパイルエラーになるため、必ずdefaultを含めるか全ケースをカバーしなければならない。 - 複数値をカンマ区切りで一つの
caseにまとめることができる。
例:
int day = 3;
String dayName = switch(day) {
case 1 -> "Monday";
case 2 -> "Tuesday";
case 3, 4, 5 -> "Weekday";
case 6, 7 -> "Weekend";
default -> "Unknown";
};
System.out.println(dayName); // Weekday
yieldを使う例:
int day = 8;
String message = switch(day) {
case 1: yield "Monday";
case 2: yield "Tuesday";
default: yield "Invalid day";
};
System.out.println(message); // Invalid day



switch式はcaseとdefaultで全ケースをカバーしないとコンパイルエラーになる!
switch文とswitch式の網羅要件について
- switch文は全
caseを網羅しなくてもよい。defaultがあれば不足分はそこが処理する。なくても実行エラーにはならない。 - switch式は全
caseを網羅しなければならず、defaultが必須か全値網羅が必要。不足するとコンパイルエラーになる。



網羅要件の違いは大切な試験ポイント。練習あるのみ!
まとめ
演算子の優先順位や型変換、条件式のboolean型のルール、switch文のbreak忘れ、switch式の網羅ルールなどは試験に頻出の重要ポイントです。
ここをしっかり理解してコンパイルエラーになるなどの挙動や、ルール・構文を丁寧に押さえて合格を目指します!
みなさんも焦らず一つずつ確実に理解を深めていきましょう!









