算術演算子(+ の左結合評価順と文字列連結演算子の切り替わり)難易度 標準無料
次のコードの出力として正しいものを選べ。
1 public class Q5 {
2 public static void main(String[] args) {
3 System.out.println(1 + 2 + "3" + 4 + 5);
4 }
5 }
- A
3345 - B
12345 - C
1+2+34+5のような文字列がそのまま出力される(数値部分も文字として結合) - Dコンパイルエラー(
intとStringを+で混在できない)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済
解説
+ 演算子は左から右へ結合(left-associative)し、途中で数値の加算と文字列連結が切り替わる点が重要。String が一度でも登場すると、それ以降の + はすべて文字列連結になる。
1 + 2:どちらもint→ 加算 → 3(int)。3 + "3":右辺がString→ 文字列連結 → "33"。"33" + 4:左辺が既にString→ 文字列連結 → "334"。"334" + 5:同様に連結 → "3345"。
出力は 3345。
- B
"3"が登場した時点で右側の+は文字列連結に切り替わる、という点を無視した誤り。全体が数値加算のまま進むことはない("3"はStringリテラル)。 - C
1 + 2はStringが登場する前に評価されるので、まず数値として計算され3になる。式の記号がそのまま文字列化されることはない。 - D
+演算子はStringと数値(あるいは他の任意の値)の連結を正式にサポートする(文字列連結演算子)。混在自体はエラーではない。
ひっかけ: 「
+ が1つでも文字列を含む式に登場すると、式全体がすべて文字列連結になる」という誤解が多い。実際は左から評価が進み、String が現れた時点から右側だけが文字列連結に切り替わる。1+2 の部分は先に数値として計算されるため、"1234"+5 や "123"+"4"+"5" にはならない。コマンド例と想定される挙動(未実行)
出力: 3345
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)