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

Java String Concatenation giving output as 2 equals 11 on concat 1+1+"equals"+1+1

我在 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 是 2,因为你将一个 int 添加到 int 2 + “equals”是字符串,之后的任何东西都将被连接起来。

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

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

+ 运算符有 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 + 1 是整数(2)

2 + " equals " 转换为 String(2 equals)

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

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

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