5

重複の可能性:
Java で ParseInt が受け取った int と int の違い

System.out.println("abc"+3+2); // 出力: abc32

System.out.println(3+2+"abc"); //出力: 5abc

理由は何ですか ?

4

5 に答える 5

18
"abc"+3

3を文字列に変換します

"abc3"

それで

"abc3" + 2

2も文字列に変換します

"abc32"

数値結果を取得するには、

"abc" + (3 + 2)
于 2012-06-14T14:19:28.270 に答える
4

作成した「+」演算子は「追加」ではなく「文字列連結」を意味するため、左側のコンテキストが文字列値であることがわかります。この場合、暗黙のToStringを介して正しい値の自由な強制が得られます。

あなたはおそらく書くことによってあなたが望むものを手に入れるでしょう

System.out.println("abc"+(3+2))

「3」は左のコンテキストなしで検出されるため、単なる整数です。次の「+」は左コンテキスト整数で検出されるため、実際の加算演算子として解釈され、(3 + 2)は5になります。その結果は「+」の左コンテキストで検出されるため、文字列に強制変換されます連結して「abc5」を生成します。

于 2012-06-14T14:18:50.240 に答える
1

式は左から右に評価されます(演算子の優先順位を適用した後)。演算子+の引数の1つが文字列の場合、結果はintをStringに解析する連結文字列になります

最初のケースでは:

"abc" + 3 -> "abc3" // String + int -> concatenate
"abc3" + 2 -> "abc32" // String + int -> concatenate

2番目の場合:

3 + 2 -> 5 // int + int -> add
5 + "abc" -> "5abc" // int + String -> concatenate
于 2012-06-14T14:21:16.233 に答える
1

The evaluation of an expression where operators have the same precedence is from left to right. In this case, the different order in the expressions causes the operator + to mean:

  1. a concatenation of Strings (an Integer is implicitly converted toString())
  2. a sum between 2 Integers

    "abc"+3+2 = (("abc" + 3) + 2) = ("abc3" + 2) = "abc32"

    3+2+"abc" = ((3 + 2) + "abc") = (5 + "abc") = "5abc"

于 2012-06-14T14:28:17.403 に答える
0

最初のケースでは、3と2は文字列として扱われ、別々に。に連結されabcます。

2番目のケースでは、合計3+2が計算されてから、に連結されabcます。

于 2012-06-14T14:19:26.793 に答える