AI作成・独立検証済(有資格者監修なし)1Z0-815 対応
条件演算子(三項演算子 ?: の二項数値昇格)難易度 高無料

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

1  public class Q8 {
2      public static void main(String[] args) {
3          int x = 5;
4          System.out.println(true ? x : 3.0);
5      }
6  }
  1. A5.0
  2. B5
  3. Cコンパイルエラー(?: の第2・第3オペランドの型が異なる)
  4. D3.0
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

条件演算子 ? :結果の型は、条件が実際に truefalse のどちらであったかとは無関係に、第2・第3オペランドの型から静的に決まる(JLS §15.25)。

第2オペランドが intx)、第3オペランドが double3.0)で、両者が数値型かつ定数の特別扱い(byteへの収まり等)に該当しない場合、二項数値昇格(binary numeric promotion)が適用され、式全体の型はより広い double に統一される。

したがって、条件が true で選ばれるのは x の枝でも、評価結果は int5 のままではなく、double に昇格された 5.0 になる。println(double)5.0 と表示する。

各誤答が違う理由
  • B条件が truex 側が選ばれても、式全体の型は第2・第3オペランドの型(intdouble)から静的に決まり、double に統一される。よって 5 ではなく 5.0
  • Cintdouble はともに数値型で二項数値昇格の対象になるため、型が異なっていてもコンパイルは通る(結果型は double)。
  • D条件は true なので選ばれるのは x 側の枝であり、3.0(選ばれなかった枝の値)が出力されることはない。
ひっかけ: 「条件が true なら xint)がそのまま返る」と考えて 5 だと誤答しやすい。実際は選ばれなかった枝の型も含めて式全体の型が決まるため、intdouble が混在すると選ばれた枝の値も double に昇格される。これは Silver 試験の頻出の落とし穴。
コマンド例と想定される挙動(未実行)
出力:
5.0
公式ドキュメント・関連JLS SE11 §15.25 Conditional Operator ? :
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
この分野をもっと解いて、得点源に
演算子 を含む問題を分野別に演習できます。
演習する →