的System.out.println( “HI” + 6 + 10);打印Hi610?

时间:2010-10-03 02:01:47

标签: java

为什么这样做?所以很有说服力。

7 个答案:

答案 0 :(得分:17)

运营商优先级和关联性。

两点:

  • 如果一个或两个参数都是字符串,则运算符+会进行字符串连接。
  • 运营商+从左到右工作。

因此,在您的示例中,"Hi"+6"Hi6""Hi6"+10"Hi610"

编辑:正如你在对另一个答案的评论中所说:如果数字是第一个,那么首先进行数字加法,因为最左边的两个操作数是数字。然后,仅在最后,发生字符串连接。因此产生"16Hi"

答案 1 :(得分:3)

这只是一个优先事项。 "Hi"+6+10解析为("Hi"+6)+10。由于"Hi"+6被连接为字符串"Hi6"10再次连接到"Hi610"

要实现您的期望,只需使用大括号正确指定优先级:

System.out.println("Hi" + (6 + 10));

答案 2 :(得分:2)

“6”和“10”被强制成字符串。

你想要“嗨16”吗?在这种情况下,请尝试System.out.println(“Hi ” + (6+10));

答案 3 :(得分:2)

按操作顺序,这相当于System.out.println(("Hi"+6)+10)。此时,Java规则指出要添加“Hi”和6将两个操作数转换为字符串并连接,产生System.out.println("Hi6" + 10),其中“Hi6”+ 10再次根据连接添加给{{1 },将打印System.out.println("Hi610")到stdout。

答案 4 :(得分:1)

因为它将整数转换为字符串。这就是java字符串连接的工作方式。

这个问题有extensive documentation。你可能想读它。

如果你做6 + 10 +“嗨”,你就会得到16Hi。如果要添加整数,请使用括号。

答案 5 :(得分:1)

6和10被视为int,使用+转换为String。所以,你打印:string + int(tostring)+ int(tostring)

http://ideone.com/a3vuH

你还期待别的吗?

答案 6 :(得分:0)

你已经遇到了Java中的单个重载运算符 - + - 并且它意味着什么(字符串连接或添加)的规则不是很明显但很明确。

与往常一样,当优先规则不直观时,请使用括号:

System.out.println("Hi " + (6+10));