的System.out.println( “ABC” + 3 + 2);为什么输出是abc32而不是abc5?

时间:2012-06-14 14:16:40

标签: java core

  

可能重复:
  Difference between int and int received by ParseInt in java

  

的System.out.println( “ABC” + 3 + 2); //输出: abc32

     

的System.out.println(3 + 2 + “ABC”); //输出: 5abc

是什么原因?

5 个答案:

答案 0 :(得分:17)

"abc"+3

将3转换为字符串

"abc3"

然后

"abc3" + 2

将2转换为字符串

"abc32"

要获得数字结果,请执行

"abc" + (3 + 2)

答案 1 :(得分:4)

因为您编写的“+”运算符表示“字符串连接”,而不是“添加”,因为它的左上下文是字符串值。在这种情况下,您可以通过隐式ToString获得正确值的自由强制。

你可能会通过写作获得你想要的东西

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

找到“3”没有左上下文,所以它只是一个整数;使用左上下文整数找到以下“+”,因此它被解释为一个真正的add运算符,因此(3 + 2)给出5.该结果在左上下文中找到“+”,因此它被强制转换为字符串并连接起来产生“abc5”。

答案 2 :(得分: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

答案 3 :(得分:1)

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

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

    “abc”+ 3 + 2 =((“abc”+ 3)+ 2)=(“abc3”+ 2)=“abc32”

    3 + 2 +“abc”=((3 + 2)+“abc”)=(5 +“abc”)=“5abc”

答案 4 :(得分:0)

在第一种情况下,3和2被视为字符串,然后分别连接到abc

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