有关字符串连接和添加的说明?

时间:2013-12-07 12:49:41

标签: java

为什么我输出10 2030?我无法弄清楚为什么它不输出10 50?

public class Testing1 {
public static void main (String args[]){
    int num1=10,num2=20,num3=30;

    System.out.println(num1+" "+num2+num3);
    }

}

6 个答案:

答案 0 :(得分:7)

Operator precedence

System.out.println(num1+" "+(num2+num3));

评估表达式,

  优先级较高的

Operators在优先级相对较低的运算符之前进行求值。同一行上的运算符具有相同的优先级。当相同优先级的运算符出现在同一表达式中时,规则必须控制首先计算的值。除赋值运算符之外的所有二元运算符都是从**left to right**计算的;赋值运算符从右到左进行求值。

 System.out.println(num1+" "+num2+num3);

 --------------------10-----------------num1
 --------------------10 -----------------num1+" "
 --------------------10 20-----------------num1+" "+num2
 --------------------10 2030-----------------num1+" "+num2+num3

所以,现在你开始知道为什么你得到了这个输出。

让我们看看下面的语句如何为您提供所需的输出:

System.out.println(num1+" "+(num2+num3));

再次基于优先级,括号的优先级高于+。所以

(num2+num3)

首先评估,其余的是相同的。

答案 1 :(得分:6)

这不起作用,因为表达式从解释为正确,并考虑到operator precedence

走过去。

System.out.println(num1+" "+num2+num3);

首先你拿走num1并在其上加一个空格,你现在有了“10”。

其次,你将num2连接到该字符串上,你有“10 20”。

第三,你将num3连接到那个,你有“10 2030”。

事实上,你在做的是:

String s = num1 + " ";
s += num2;
s += num3;

答案 2 :(得分:1)

使用此:

System.out.println(num1 + " " +(num2 + num3));

如果您正在编写(num1 + " " + num2 + num3),Java将从num1创建一个字符串,将字符串" "添加到其中,将num2生成的字符串添加到其中,然后添加从num3到它的字符串。

加号优先被评估为字符串连接而不是数学+符号。

答案 3 :(得分:1)

因为优先顺序,即从左到右:

将评估

num1+" "制作一个10

字符串

num2+num3只会附加到该字符串,因为+运算符介于其间

num1+" "num2+num3形成10 2030

试试这种方式

System.out.println(num1+" "+(num2+num3));

有关优先级及其相关性的更多信息:http://www.cis.upenn.edu/~palsetia/java/precedenceTable.html

答案 4 :(得分:1)

制作System.out.println(num1+" "+ (num2+num3)); 在执行操作时引入任何字符串时,会发生连接而不是实际操作。

所以,如果你做System.out.println(num1+num2+ " " +num3);。您将获得输出30 30这是因为您的操作是在引入字符串连接之前执行的。因此产生了操作结果。

请记住,在第一次连接发生后,所有操作数都将被视为字符串。

在连接之前,将评估所有操作。

答案 5 :(得分:1)

输出的原因是此上下文中的+(先发生num1 + " ")被视为连接运算符,其余的也被连接起来。其他答案建议使用括号来确保在字符串评估之前首先添加num2和num3。