此代码:
public void main(String[] args)
{
String s1 = 50+40+"Hello"+50+50;
System.out.println(s1);
}
输出:90Hello5050
为什么?
答案 0 :(得分:4)
这只是优先级和关联性的问题。您的代码相当于:
String s1 = (((50 + 40) + "Hello") + 50) + 50;
那就是:
String s1 = ((90 + "Hello") + 50) + 50;
是:
String s1 = ("90Hello" + 50) + 50;
是:
String s1 = "90Hello50" + 50;
是:
String s1 = "90Hello5050";
如果你想要90Hello100
,你应该使用括号来明确它。我把它写成:
String s1 = (50 + 40) + "Hello" + (50 + 50);
答案 1 :(得分:4)
根据Java Language Specification, Section 15.7, "Evaluation Order",Java中的运算符从左到右进行评估。
这意味着您的连接被评估为像
一样String s1 = (((50+40)+"Hello")+50)+50;
这就是为什么
通常,当你有一个二进制操作(比如" +"在这种情况下)可以应用于String
并且计算涉及String
时,其他操作数也会转换为String
。
答案 2 :(得分:0)
因为Java会从左到右连接你的字符串。并且它将相互添加50和40,因为它们是int
然后将其连接到“hello”字符串,结果为str
,因为int
和str
将是{ {1}}输出。然后“90hello”为str
,它会与50 str
联系,我所说的结果将是int
并继续。