Kodrill

演算子と分岐文

Java SE Bronze (1Z0-818-JPN) 試験

各種演算子の使用/演算子の優先順位/if, if/else文の使用/switch文の使用

問題数
20 問
合格ライン
60%
実行して確認済み
19 問
この分野の要点を読む7 章・約 12 分。実行して確かめたコード例と、試験でよくある引っかけをまとめています

ログインなしで試す

無料の 5 問を、1問ごとに正誤と解説を見ながら解けます。解答は保存されません。

5 問を試す

無料登録して学習を記録する

学習履歴・ダッシュボード・ブックマーク・模試モードが使えます。

★ 残り 15 問はプレミアム会員限定です

無料プランでは先頭 5 問まで解けます。プレミアムなら全問題・苦手問題の復習・広告非表示が使えます。
料金プランを見る

問題と解説を見る (無料)

登録しなくても、次の5問は問題文と解説をそのまま読めます。

演算子と分岐文の要点

内容の確認日: 2026-10-03

この分野は、コードを 1 行ずつ追って「何が出力されるか」を答える問題が中心です。演算子の細かいルール (整数同士の割り算、++ の前置と後置、&& の短絡評価など) を 1 つでも取り違えると答えがずれるので、暗記より「手で計算して確かめる」練習が効きます。

出題項目は「各種演算子の使用」「演算子の優先順位」「if, if/else 文の使用」「switch 文の使用」の 4 つです。特に問われやすいのは、各種演算子と switch 文のフォールスルーです。

算術演算子: 整数の除算と剰余

int 同士の割り算 / は、結果も int になり、小数点以下は切り捨て (0 の方向へ丸める) られます。どちらかが double なら結果も double です。剰余 % の結果の符号は、割られる数 (左側) の符号と同じになります。

Main.java
public class Main {    public static void main(String[] args) {        System.out.println(7 / 2);        System.out.println(7 % 2);        System.out.println(7 / 2.0);        System.out.println(-7 % 2);    }}
ターミナル
java Main
3
1
3.5
-1

整数を 0 で割ると実行時に ArithmeticException が発生します。一方、double を 0 で割っても例外にはならず、結果は Infinity (無限大) になります。

byte や short 同士の計算結果は、int に広げられてから計算されるため int 型になります。そのため byte の変数に計算結果をそのまま代入するとコンパイルエラーです。ただし += などの複合代入演算子は、自動的に元の型へ戻してくれるのでエラーになりません。

Main.java
public class Main {    public static void main(String[] args) {        byte b = 10;        b = b + 1;        b += 1;        System.out.println(b);    }}
ターミナル
javac Main.java

コンパイルエラー (4 行目): b + 1 は int 型なので、キャストしないと byte に代入できない (5 行目の b += 1 は問題ない)

インクリメントとデクリメント

++ (1 増やす) と -- (1 減らす) は、変数の前に書くか後ろに書くかで、式の中で使われる値が変わります。

・前置 ++a: 先に a を増やし、増やした後の値を式に使う ・後置 a++: 増やす前の値を式に使い、その後で a を増やす

Main.java
public class Main {    public static void main(String[] args) {        int a = 5;        int b = a++ + 10;        System.out.println(a + " " + b);        int c = 5;        int d = ++c + 10;        System.out.println(c + " " + d);    }}
ターミナル
java Main
6 15
6 16

どちらの場合も、最後に変数自身が 1 増えている点は同じです。違うのは「式の中で使われた値」だけです。

比較演算子と論理演算子

比較演算子 (==、!=、<、>= など) の結果は boolean です。論理演算子は、&& (かつ)、|| (または)、! (否定) が基本です。

&& と || は短絡評価をします。&& は左側が false なら、|| は左側が true なら、その時点で結果が決まるので右側を実行しません。一方、& と | は左側の結果にかかわらず右側も必ず実行します。次のコードでは、&& の行は右側の 10 / n が実行されないので例外になりませんが、& の行では実行されて例外が発生します。

Main.java
public class Main {    public static void main(String[] args) {        int n = 0;        System.out.println((n != 0) && (10 / n > 1));        System.out.println((n != 0) & (10 / n > 1));    }}
ターミナル
java Main
false

実行時に例外が発生: ArithmeticException

文字列を == で比較すると、中身ではなく「同じオブジェクトか」を比べます。中身が同じかどうかは equals メソッドで比べます。

Main.java
public class Main {    public static void main(String[] args) {        String a = "Java";        String b = new String("Java");        System.out.println(a == b);        System.out.println(a.equals(b));    }}
ターミナル
java Main
false
true

文字列の連結と演算子の優先順位

+ は、どちらかが文字列なら文字列の連結になります。+ は左から順に計算されるので、文字列が出てくる前の数値は足し算され、文字列が出てきた後は連結になります。

Main.java
public class Main {    public static void main(String[] args) {        System.out.println("合計: " + 1 + 2);        System.out.println(1 + 2 + "円");        System.out.println("合計: " + (1 + 2));    }}
ターミナル
java Main
合計: 12
3円
合計: 3

主な演算子の優先順位は、高いものから次の順です。同じ優先順位の演算子は、代入演算子を除いて左から計算します。迷ったら ( ) を付けて考えましょう。

1. 後置の ++ -- 2. 前置の ++ --、単項の + -、!、キャスト 3. * / % 4. + - 5. < > <= >= 6. == != 7. & → ^ → | 8. && 9. || 10. 三項演算子 ? : 11. 代入 = += など (右から計算)

x *= 3 + 2 のような複合代入は、右辺全体を先に計算するので x = x * (3 + 2) と同じ意味になります。x = x * 3 + 2 ではない点に注意してください。

if 文と三項演算子

if の条件には boolean の式しか書けません。if (x = 5) は比較 (==) ではなく代入で、式の値が int になるためコンパイルエラーです。

{ } を省略した if は、直後の 1 文だけが条件の対象になります。インデント (字下げ) は意味を持たないので、見た目にだまされないようにしましょう。次のコードでは、2 つ目の println は if の外にあるので、条件が false でも実行されます。

Main.java
public class Main {    public static void main(String[] args) {        int score = 40;        if (score >= 60)            System.out.println("合格");            System.out.println("おめでとう");    }}
ターミナル
java Main
おめでとう

if ~ else if ~ else は上から順に条件を調べ、最初に条件を満たしたブロックだけを実行します。後ろの条件も満たしていても、実行されるのは 1 つだけです。

三項演算子 条件 ? 値1 : 値2 は、条件が true なら値1、false なら値2 になる式です。入れ子にした場合は、右側から組み立てて読むと分かりやすくなります。

switch 文

switch 文は、式の値と一致する case から実行を始めます。break がないと、次の case の処理も続けて実行されます (フォールスルー)。どの case にも一致しないときは default から実行します。default は途中に書いても構いません。

Main.java
public class Main {    public static void main(String[] args) {        String level = "B";        switch (level) {            case "A":                System.out.println("優");            case "B":                System.out.println("良");            case "C":                System.out.println("可");                break;            default:                System.out.println("不可");        }    }}
ターミナル
java Main
良
可

switch の式に使える型は、byte・short・char・int とそのラッパークラス、String、列挙型です。long・float・double・boolean は使えません。また、case に書く値は定数でなければならず、同じ値の case を 2 つ書くとコンパイルエラーです。

Main.java
public class Main {    public static void main(String[] args) {        int n = 1;        switch (n) {            case 1:                System.out.println("one");                break;            case 1:                System.out.println("first");        }    }}
ターミナル
javac Main.java

コンパイルエラー (8 行目): case 1 が重複している

String の switch は equals と同じく中身で比較され、大文字と小文字は区別されます。

試験でよくある引っかけ

  • int 同士の割り算

    5 / 2 は 2 です。小数が欲しいときは、どちらかを double にします (5 / 2.0 は 2.5)。

  • 剰余の符号

    -7 % 3 は -1 です。結果の符号は割られる数 (左側) と同じになります。

  • 後置インクリメントの値

    b = a++ では、b には増やす前の値が入ります。a 自身は増えています。

  • && と & の違い

    && は左側が false なら右側を実行しません。右側に ++ や割り算がある問題では、実行されたかどうかで答えが変わります。

  • { } のない if とインデント

    { } を省略した if の対象は直後の 1 文だけです。字下げされていても 2 文目は if の外です。

  • switch の break 忘れ

    break がない case は、次の case の処理まで続けて実行されます。一致した case から下を順に追いましょう。

問題で確認する

この分野の問題を、解説つきで読めます (登録不要)。

出典・参考

コード例は、試験の対象バージョンで実際にコンパイル・実行して結果を確認しています。