System.out.println("abc"+3+2); // 出力: abc32
System.out.println(3+2+"abc"); //出力: 5abc
理由は何ですか ?
System.out.println("abc"+3+2); // 出力: abc32
System.out.println(3+2+"abc"); //出力: 5abc
理由は何ですか ?
"abc"+3
3を文字列に変換します
"abc3"
それで
"abc3" + 2
2も文字列に変換します
"abc32"
数値結果を取得するには、
"abc" + (3 + 2)
作成した「+」演算子は「追加」ではなく「文字列連結」を意味するため、左側のコンテキストが文字列値であることがわかります。この場合、暗黙のToStringを介して正しい値の自由な強制が得られます。
あなたはおそらく書くことによってあなたが望むものを手に入れるでしょう
System.out.println("abc"+(3+2))
「3」は左のコンテキストなしで検出されるため、単なる整数です。次の「+」は左コンテキスト整数で検出されるため、実際の加算演算子として解釈され、(3 + 2)は5になります。その結果は「+」の左コンテキストで検出されるため、文字列に強制変換されます連結して「abc5」を生成します。
式は左から右に評価されます(演算子の優先順位を適用した後)。演算子+の引数の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
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:
toString()
)a sum between 2 Integers
"abc"+3+2 = (("abc" + 3) + 2) = ("abc3" + 2) = "abc32"
3+2+"abc" = ((3 + 2) + "abc") = (5 + "abc") = "5abc"
最初のケースでは、3と2は文字列として扱われ、別々に。に連結されabc
ます。
2番目のケースでは、合計3+2
が計算されてから、に連結されabc
ます。