1Z0-826-JPN 対応
並行処理(Atomic)難易度 標準無料

次のコードの出力として正しいものを選べ。

1  import java.util.concurrent.atomic.AtomicInteger;
2  public class Q5 {
3      public static void main(String[] args) {
4          AtomicInteger a = new AtomicInteger(0);
5          System.out.println(a.getAndIncrement());  // (1)
6          System.out.println(a.incrementAndGet());   // (2)
7          System.out.println(a.getAndAdd(5));         // (3)
8          System.out.println(a.get());                // (4)
9      }
10 }
  1. A0 / 2 / 2 / 7(上から順に)
  2. B1 / 2 / 7 / 7
  3. C0 / 1 / 2 / 7
  4. D1 / 1 / 7 / 7
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:A✓有資格者監修

解説

AtomicInteger の getAndXxx 系は更新前の値を返し、xxxAndGet 系は更新後の値を返す。

  • (1) getAndIncrement():現在0を返し → 値は1。出力 0
  • (2) incrementAndGet():値を2にして → 2を返す。出力 2
  • (3) getAndAdd(5):現在2を返し → 値は7。出力 2
  • (4) get():現在値7。出力 7
各誤答が違う理由
  • B(1)を「更新後の1」と取り違えた誤り。getAndIncrement は更新前の0を返す。
  • C(2)を「更新前の1」と取り違えた誤り。incrementAndGet は更新後の2を返す。
  • Dget系/AndGet系の返す値(前/後)を全体的に取り違えた誤り。
ひっかけ: メソッド名の語順(get-And-Increment と increment-And-Get)で「返すのが前か後か」が決まる。
実機確認の答え合わせ
出力(単一スレッドなので決定的):
0
2
2
7
✓有資格者(著者)による書き下ろし解説

有資格者(著者)が監修した問題は、すべて無料サンプルとして公開しています。買う前に、その全部を実際に解いて解説まで読めます。有料で追加される問題はAIが作成したもので、有資格者の監修は入っていません。

この問題集の作り方

  1. 問題と解説はAIが作成しています。有資格者(著者)が監修した問題は、無料サンプルとして公開している分だけです。有料で追加される問題に監修は入っていません。
  2. 各問に、公式ドキュメントの出典リンクを付けています。書いてあることは、出典に当たって確かめられます。
  3. 誤答の選択肢それぞれに、なぜ誤りなのかの理由を書いています。
  4. 解説に載せているコンパイル結果は、実際に javac を走らせた出力です。想定した挙動ではありません。
  5. 誤りを見つけたら報告できます。原則として無償で訂正・削除します。
  6. 各試験の運営団体とは無関係の非公式教材です。合格を保証するものではありません。
この分野をもっと解いて、得点源に
並行処理 を含む問題を分野別に演習できます。
演習する →