加号运算符的优先级仅在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运算符在用于连接字符串时具有更高的优先级,或者它是否意味着对于字符串和数字,加号运算符的优先级没有区别,但它只是从左到右进行评估?
答案 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
的运营商评估顺序