70910


`a + b` の値は `int` 型です。 `a = 1`, `b = 2`です。  
`String.valueOf()` で `String` 型に変更して `a + b` を12と表示させたいです。  
しかし、以下のように試したコードではうまくいきませんでした。

  * `return String.valueOf(a + b)` → 4となってしまう。
  * `return String.valueOf("a "+ "b")` → abとなってしまう。

どうしたら12を表示させられるか教えていただきたいです。


CC BY-SA 4.0
2020-10-04T10:23:54.590
70905
2020-10-05T21:22:24.397
2020-10-04T11:17:36.623
32986
32774
question
java
int型の値を文字列として連結したい


単純にそれっぽい式を組み合わせてみただけ、のように見えます。どのような順序で処理を行えば良いのか、しっかり考えられるようにして下さい。

  * `int`型同士の`+`演算は、数値としての計算を行う。(`1 + 2`は整数値の`3`になる。)
  * `String`型同士の`+`演算は、文字列としての連結を行う。(`"1" + "2"`は文字列の"12"になる。)

あなたは後者の「文字列としての連結」を行いたいのですから、`String`型の`"1"`と`"2"`を`+`演算の前に作っておく、と言う必要があります。

ご質問内の書き方に合わせて1つの式で表すと、

[code]

            return String.valueOf(a) + String.valueOf(b);
    
[/code]

とでもなるでしょう。


CC BY-SA 4.0
2020-10-04T10:56:02.627
70906
2020-10-04T10:56:02.627
13972
70905
answer


`String.valueOf()` は利用していませんが、`int`型を連結するのであれば次も利用可能です:

[code]

    int a = 1;
    int b = 2;
    String str = "" + a + b;
    System.out.println(str);
    
[/code]

参考:

  * [How to concatenate int values in java?](https://stackoverflow.com/a/2674750/4506703) \- Stack Overflow

* * *

仕様は次のリンクの通りになります。

  * [15.18.1. String Concatenation Operator +](https://docs.oracle.com/javase/specs/jls/se11/html/jls-15.html#jls-15.18.1)

簡単に言うと、 `x + y` の
`x`か`y`の一方が`String`の場合、`+`は特別な挙動となり、他方を文字列変換した上で、両者文字列の連結になります。

`a + b` だと単に `int` 同士の計算ですが、最初に `"" + a`
とすることで`String`と`int`の計算、つまり上記の仕様にある条件に当てはまるようになります。  
ですので、空文字列と`a`を文字列化したものの連結、つまり `a`を文字列化したものが得られます。

更に `上で計算した結果 + b`の計算を行うわけですが、これも`String`と`int`の計算になります。

そういうわけで、最終的に得られるのは`aを文字列化したもの`と`bを文字列化したもの`を連結した文字列になります。


CC BY-SA 4.0
2020-10-04T22:56:14.557
70910
2020-10-05T21:22:24.397
2020-10-05T21:22:24.397
2808
2808
70905
answer