Java 重新分级字符串连接和添加的说明?
为什么我会得到10个2030作为输出?我不明白为什么它不输出为10 50?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); } } 在评价表达式中 优先级较高的运算符在优先级相对较低的运算符之前求值。同一行上的运算符具有同等优先级。当同等优先级的运
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+“
首先发生)的+
被视为串联运算符,其余的也被串联。其他的