为什么整数和字符串的连接表现得像这样?

时间:2014-05-10 14:00:03

标签: java string concat

此代码:

public void main(String[] args)
{
    String s1 = 50+40+"Hello"+50+50;
    System.out.println(s1);
}

输出:90Hello5050

为什么?

3 个答案:

答案 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;

这就是为什么

  • 增加50和40以产生90
  • 增加90和"你好"屈服" 90Hello"
  • 添加" 90Hello"和50来产生" 90Hello50"
  • 添加" 90Hello50"和50以产生" 90Hello5050"

通常,当你有一个二进制操作(比如" +"在这种情况下)可以应用于String并且计算涉及String时,其他操作数也会转换为String

答案 2 :(得分:0)

因为Java会从左到右连接你的字符串。并且它将相互添加50和40,因为它们是int然后将其连接到“hello”字符串,结果为str,因为intstr将是{ {1}}输出。然后“90hello”为str,它会与50 str联系,我所说的结果将是int并继续。