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

表达式从左到右求值(在应用运算符优先顺序之后)。如果 operator + 的参数之一是字符串,则结果是将 int 解析为 String 的连接字符串

在第一种情况下:

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

在第二种情况下:

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

运算符具有相同优先级的表达式的评估是从左到右。在这种情况下,表达式中的不同顺序导致运算符 + 表示:

  1. 字符串的串联(整数被隐式转换toString()
  2. 2个整数之间的总和

    "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.

在第二种情况下,3+2计算总和,然后将其连接到abc

于 2012-06-14T14:19:26.793 回答