ser*_*erg 1 java variable-assignment boolean-expression assignment-operator assign
对不起,对于奇怪的问题表述.如果有人知道如何让它变得更好,我会很高兴.以为我们有3个布尔变量:
boolean a = false;
boolean b = false;
boolean c = false;
Run Code Online (Sandbox Code Playgroud)
Java允许编写以下内容:
System.out.println(a=b);
System.out.println(a==b & a==c);
Run Code Online (Sandbox Code Playgroud)
从这两个陈述中我预计以下内容也是合法的.
System.out.println(a=b & a=c);
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么在第二种情况下不允许,在第一种情况下允许它?在第二种情况下,两个赋值都以布尔值解析,而且对我来说看起来合法.
将您的上一个代码段更改为
System.out.println((a = b) & (a = c));
Run Code Online (Sandbox Code Playgroud)
赋值运算符(=)具有较低的优先级比所述布尔逻辑AND运算符(&).使用括号显式分组表达式.
这是因为=优先级低于&(顺便提一下,它是片段中的布尔运算符而不是按位运算符; &&除了它不会短路外,它是相同的).
因此你的表达式读取(带有parens):
a = (b & a) = c
Run Code Online (Sandbox Code Playgroud)
但你不能分配c给b & a.
| 归档时间: |
|
| 查看次数: |
176 次 |
| 最近记录: |