2012-06-14 53 views
4

可能重复:
Difference between int and int received by ParseInt in javaSystem.out.println(“abc”+ 3 + 2);为什么输出是abc32而不是abc5?

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

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

是什么原因?

+2

Dup:http://stackoverflow.com/questions/11008538/difference-between-int-and-int-received-by-parseint-in-java/11008551#11008551 –

+0

这个问题是前所未有的!

+0

它从左到右依次增加。第一种情况是(“abc”+3)+2,第二种情况是(3 + 2)+“abc” –

回答

16
"abc"+3 

3转换为字符串

"abc3" 

然后

"abc3" + 2 

2转换为字符串以及

"abc32" 

为了得到一个数值结果做

"abc" + (3 + 2) 
4

因为你写的“+”运算符的意思是“字符串连接”,而不是“添加”,因为在左边的上下文中是一个字符串值。在这种情况下,您可以通过隐式的ToString获得正确值的免费强制。

你很可能让你写

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

“3”被发现没有左背景下,所以它只是一个整数想要的东西;在左上角整数中找到下面的“+”,所以它被解释为一个真正的加法运算符,因此(3 + 2)给出5.该结果在左边的“+”上下文中找到,所以它被强制为一个字符串并连接以产生“abc5”。

0

在第一种情况下,3和2被视为字符串,然后单独链接到abc

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

1

表达式从左到右进行评估(应用运算符优先顺序后)。如果参数为操作者+一个是一个字符串,其结果是一个串联的字符串解析INT为字符串

在第一种情况:

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

在第二种情况:

3 + 2 -> 5 // int + int -> add 
5 + "abc" -> "5abc" // int + String -> concatenate 
+1

*操作数*从左到右计算。表达式根据运算符优先级进行评估。在这种情况下,它是同样的事情,但并非总是如此。 – EJP

+0

@EJP对。编辑我的答案。 – Evans

1

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

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

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

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

相关问题