我在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
的输出。
答案 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);