記憶庫

自分用のメモです。

数値の加算と文字列の結合について

以下を実行した結果はどうなるだろうか。

/* ケース1 */
System.out.println(1 + 2);

結果は "3" と即答できる。
では、以下を実行した結果はどうなるだろうか。

/* ケース2 */
System.out.println(1 + 2 + "hoge");

結果は、"3hoge" である。
次に、以下を実行した結果はどうなるだろうか。

/* ケース3 */
System.out.println(1 + 2 + "hoge" + 3 + 4);

結果は、"3hoge7" ではなく、"3hoge34" である。

以上から、"+" を使った演算に関して以下の法則を見出すことが出来る。

  • 加算は左から右に実行される。
  • オペランドが数値だけの時は算術演算を行う。
  • オペランドに文字列が出現した時点で、文字列結合演算が行われる。

ケース3 にて "3hoge7" と表示させたい場合は、以下のよう優先して演算させたい箇所を () で囲む。

/* ケース4 */
System.out.println(1 + 2 + "hoge" + (3 + 4));

ケース2 にて "12hoge" と表示させたい場合は、少し卑怯くさいが以下のようにすればよい。

/* ケース5 */
System.out.println("" + 1 + 2 + "hoge");

素直に StringBuilder 使えって話ですね。