加号运算符的优先级只在java教程优先级表中列出一次。但是,以下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这是否意味着加号运算符在连接字符串时具有更高的优先级,还是意味着加号运算符的优先级对于字符串和数字没有什么不同,而是简单地从左到右求值?
发布于 2013-11-15 07:59:19
+总是从左到右流动
在第一个示例String unexpected = "1 + 1 = " + 1 + 1;中,string首先出现,然后int值so 1被视为string。
在第二个示例operator.(BODMAS)中,您使用的是比+ String expected = "1 + 1 = " + (1 + 1);具有更高优先级的()
考虑另一个例子:
String unexpected1 =1+1+ "1 + 1 = " ;
System.out.println(unexpected1);输出为21 + 1 =
在这里,int值首先得到1+1 = 2,然后字符串SO2与1+1=连接
发布于 2013-11-15 07:46:12
这意味着它是从左到右评估。
发布于 2013-11-15 07:58:25
来自jls SE8 15.18.1字符串连接运算符+: +运算符在语法上是左联想的,不管它是由类型分析确定的,以表示字符串级联或数值相加。在某些情况下,需要小心才能得到预期的结果。例如,表达式:
a + b + c总是被认为是意义:(a + b) + c
因此,表达式的结果是:1 + 2 + " fiddlers"
is:"3 fiddlers"
但结果是:"fiddlers " + 1 + 2
is:"fiddlers 12"
另一个例子:1 + 1 + "" + 1 + 1
将导致:211
这就是为什么,对于您的上下文"1 + 1 = " + 1 + 1;
将导致字符串1 + 1 = 11。
但是,"1 + 1 = " + (1 + 1);会导致1 + 1 = 2
https://stackoverflow.com/questions/19995956
复制相似问题