Java中+(加号)运算符的优先级是什么?

时间:2013-11-15 07:44:20

标签: java

加号运算符的优先级仅在java tutorial precedence table中列出一次。但是以下Java表达式:

String unexpected = "1 + 1 = " + 1 + 1; 
String expected   = "1 + 1 = " + (1 + 1);
System.out.println(unexpected);
System.out.println(expected);

导致此输出:

1 + 1 = 11
1 + 1 = 2

这是否意味着plus运算符在用于连接字符串时具有更高的优先级,或者它是否意味着对于字符串和数字,加号运算符的优先级没有区别,但它只是从左到右进行评估?

4 个答案:

答案 0 :(得分:8)

这意味着它是evaluated left to right

答案 1 :(得分:2)

From jls SE8 15.18.1. String Concatenation Operator +: +运算符在语法上是左关联,无论它是否由 类型分析表示字符串连接或数字加法。在某些情况下,护理是 需要获得所需的结果。例如,表达式:

a + b + c

始终被视为含义:(a + b) + c

因此表达式的结果为:1 + 2 + " fiddlers"
是:"3 fiddlers"

但结果为:"fiddlers " + 1 + 2
是:"fiddlers 12"

另一个例子:1 + 1 + "" + 1 + 1
将导致:211

这就是为什么,为您的背景"1 + 1 = " + 1 + 1;
将产生字符串1 + 1 = 11

但是,"1 + 1 = " + (1 + 1);会产生1 + 1 = 2

答案 2 :(得分:1)

+始终来自left to right

在你的第一个例子String unexpected = "1 + 1 = " + 1 + 1;中,首先是字符串,然后是int值,所以1被视为字符串。

在您的第二个示例String expected = "1 + 1 = " + (1 + 1);中,您使用的()优先于+运算符。( BODMAS

考虑另一个例子:

String unexpected1 =1+1+ "1 + 1 = " ;
 System.out.println(unexpected1);

输出为21 + 1 =

这里int值首先是1 + 1 = 2然后是字符串文字,所以2与1 + 1 =

连接

答案 3 :(得分:0)

在字符串中使用+将触发连接而不是求和 但是当你使用(1 + 1)并使用+将它加到“1 + 1 =”时,括号内的表达式将首先被计算,然后连接到字符串的其余部分。评估括号内部的工作独立于String,因此1和1将被视为彼此相加的两个整数。

当使用相同的操作符时,所有内容都从左到右进行评估。 您可以找到here

的运营商评估顺序