Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重新分级字符串连接和添加的说明?_Java - Fatal编程技术网

Java 重新分级字符串连接和添加的说明?

Java 重新分级字符串连接和添加的说明?,java,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); } } 在评价表达式中 优先级较高的运算符在优先级相对较低的运算符之前求值。同一行上的运算符具有同等优先级。当同等优先级的运

为什么我会得到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);
    }

}

在评价表达式中

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

所以,现在你们知道了为什么你们得到了那个输出

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

System.out.println(num1+" "+(num2+num3));
同样基于优先级,括号的优先级高于
+
。所以

(num2+num3)

首先计算,其余的相同。

在评价表达式中

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

所以,现在你们知道了为什么你们得到了那个输出

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

System.out.println(num1+" "+(num2+num3));
同样基于优先级,括号的优先级高于
+
。所以

(num2+num3)

首先计算,其余的相同。

使用以下方法:

System.out.println(num1 + " " +(num2 + num3));
如果您正在编写
(num1+“”+num2+num3)
Java将从
num1
生成一个字符串添加字符串
“”
,将从
num2
生成的字符串添加到该字符串中,然后将从
num3
生成的字符串添加到该字符串中

加号首先被计算为字符串连接,而不是数学+号。

使用以下方法:

System.out.println(num1 + " " +(num2 + num3));
如果您正在编写
(num1+“”+num2+num3)
Java将从
num1
生成一个字符串添加字符串
“”
,将从
num2
生成的字符串添加到该字符串中,然后将从
num3
生成的字符串添加到该字符串中


加号首先被计算为字符串连接,而不是数学+号。

因为优先级不同,即从左到右:

num1+”
将通过生成一个
10

num2+num3
将简单地附加到该字符串,因为
+
运算符介于两者之间

num1+”
num2+num3
形成
10 2030

这样试试

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

有关优先级及其关联性的详细信息:

因为优先级是从左到右的:

num1+”
将通过生成一个
10

num2+num3
将简单地附加到该字符串,因为
+
运算符介于两者之间

num1+”
num2+num3
形成
10 2030

这样试试

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

有关优先级及其关联性的更多信息:

使其成为
System.out.println(num1++(num2+num3))
当您在执行操作时引入任何字符串时,将发生串联而不是实际操作

所以如果您执行
System.out.println(num1+num2+“”+num3)。您将以
30
的形式获得输出,这是因为您的操作是在引入字符串连接之前执行的。从而产生了运行结果

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


在连接之前,将计算所有操作

使其成为
System.out.println(num1++(num2+num3))
当您在执行操作时引入任何字符串时,将发生串联而不是实际操作

所以如果您执行
System.out.println(num1+num2+“”+num3)。您将以
30
的形式获得输出,这是因为您的操作是在引入字符串连接之前执行的。从而产生了运行结果

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


在连接之前,将计算所有操作

这不起作用,因为将表达式从解释为,同时考虑

走过它

System.out.println(num1+" "+num2+num3);
首先,你把你的
num1
和concat一个空格放在上面,你现在有了“
10

第二次将
num2
集中到该字符串上,就有了“
1020

第三,你在上面加上“
102030

事实上,你正在做的是:

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

这不起作用,因为将表达式从解释为,同时考虑

走过它

System.out.println(num1+" "+num2+num3);
首先,你把你的
num1
和concat一个空格放在上面,你现在有了“
10

第二次将
num2
集中到该字符串上,就有了“
1020

第三,你在上面加上“
102030

事实上,你正在做的是:

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

产生该输出的原因是,此上下文中的
+
num1+“”
首先发生)被视为串联运算符,其余的也被串联。其他答案建议使用括号,以确保在字符串求值之前首先添加num2和num3。

输出的原因是,在此上下文中(
num1+“
首先发生)的
+
被视为串联运算符,其余的也被串联。其他的