Java 字符串连接在 concat 1+1+ "equals" +1+1 上给出 2 等于 11 的输出



我用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的输出。

+运算符具有相同的优先级,无论是加法还是串联,并且从左到右关联。因此:

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 + 1是整数(2

2 + " equals "被广播到字符串(2 equals

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

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

它应该是(1 + 1) + " equals " + (1 + 1)

在字符串中添加一个数字会得到一个字符串。1+1是2,因为您将int添加到int 2+"equals"是字符串,之后的任何东西都将被连接起来。

在一个字符串之后,Java看到其他连接的参数显然需要调用toString()。如果您将操作放在parens:中,向Java提供有关运算符顺序的提示,您将获得正确的输出

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

相关内容

最新更新