Java字符串连接在concat 1 + 1 +&#34上输出为2等于11;等于" + 1 + 1

时间:2016-03-31 04:02:12

标签: java string string-concatenation

我在java中编写代码并输出为2 equals 11。我的代码是

public class StringPrct 
{
public static void main(String[]args)
{
String s= 1+1+" equals "+1 +1;
System.out.println(s);
}
}

现在问题是为什么我没有得到2 equals 2的输出。

4 个答案:

答案 0 :(得分:6)

+运算符具有same precedence whether it's addition or concatenation,并且从左到右关联。所以:

1 + 1 + " equals " + 1 + 1

评估为

(((1 + 1) + " equals ") + 1) + 1
((2 + " equals ") + 1) + 1
("2 equals " + 1) + 1
"2 equals 1" + 1
"2 equals 11"

如果要覆盖它,则需要提供括号:

1 + 1 + " equals " + (1 + 1)

这变为:

((1 + 1) + " equals ") + (1 + 1)
(2 + " equals ") + (1 + 1)
"2 equals " + (1 + 1)
"2 equals " + 2
"2 equals 2"

为清楚起见,您应该将括号添加到第一个1 + 1,以便阅读代码的人不必进行添加括号和评估的心理练习:

(1 + 1) + " equals " + (1 + 1)

答案 1 :(得分:5)

1 + 1是整数(2

2 + " equals "已投放到字符串(2 equals

"2 equals " + 1是字符串(2 equals 1

"2 equals 1" + 1是字符串(2 equals 11

应为(1 + 1) + " equals " + (1 + 1)

答案 2 :(得分:1)

向字符串添加数字会给出一个字符串。当你在int 2 +"中添加一个int时,1 + 1是2;等于"是字符串后来任何东西都会被连接起来。

答案 3 :(得分:1)

在字符串之后,Java显然看到其他连接的参​​数需要对它们调用toString()。如果您通过将操作放在parens中给Java一个关于操作员顺序的提示,那么您将获得正确的输出:

String s= (1+1) +" equals "+ (1 +1);