我学习 Java 已经有一段时间了,还在学习新的语法技巧和东西。我在Android源代码中遇到了这个:
boolean retry = id == 1;
这是什么意思?
id == 1
是一个布尔表达式,如果id
等于1
,则为真,否则为假。
boolean retry = id == 1;
声明一个名为 的布尔变量retry
,并将布尔表达式的值赋给id == 1
该变量。
所以它声明了一个布尔变量,如果是id == 1
,则为真,否则为假。
为了让它更清楚一点,你可以这样写:
boolean retry = (id == 1);
retry
is true
ifid
的值为 1,否则retry
为false
。
它与
boolean retry;
if (id == 1)
retry = true;
else
retry = false;
==
等于谓词的优先级高于=
赋值运算符的优先级。
因此,id == 1
首先评估,然后将其值(真或假)分配给retry
。
布尔重试获取 true if 的值id == 1
。
它与以下内容相同:
boolean retry;
if (id == 1) {
retry = true;
} else {
retry = false;
}
首先 theid
用 1 评估,所以大概id
是 a integer
。
之后,该值retry
被赋予此评估,因此如果id
等于 1,retry
将变为true
,并且对于任何其他值id
retry
将变为false
。
我发现仅使用括号有助于消除此类复杂语句背后的混乱。
boolean retry = (id == 1);
对我来说更有意义。很明显,这(id == 1)
是一个正在评估的表达式,并且结果被分配给boolean retry
此行创建一个布尔变量并将其设置为true
如果id
等于 1,false
如果不是。
(x) ? true : false
在 C、C++、C# 等中,它的作用类似于三元运算;
类似的语法:
boolean retry = (id == 1)? true: false;
或者它可以写成另一种方式:
boolean retry;
if (id == 1) {
retry = true;
} else {
retry = false;
}
如果你这样看,可能更容易看到发生了什么:
boolean retry = (id == 1);
所以基本上它检查 id 是否等于 1,然后将结果分配给变量 retry。
这是一种定义布尔变量的方法。
当id
是时1
, 的值retry
将是true
。
它与 基本相同retry = (id == 1)
。它正在评估布尔表达式,并将其分配给retry
.
retry
分配一个表达式,它是真或假,就像retry
a一样boolean
。此外,==
将首先解决,然后将其分配给retry
。
布尔变量retry
将获得值0
或1
取决于表达式是否id==1
返回true
或false
。
如果 的值为id
,1
则将id==1
对应于true
,因此retry=1
。
如果 的值为id
,0
则id==1
将对应于false
,因此retry=0
。
请注意,这==
是一个比较运算符。
1.int id = 1;
boolean retry = id == 1;
这意味着retry = true;
。
2.int id = 2;
boolean retry = id == 1;
这意味着retry = false;
。
简化 id == 1 可以认为是
if ( id == 1 ){
}
我的回答将基于id是 int 的假设,因此与 1 的比较是正确的,并且没有出现编译错误。 ==是 Java 中的相等运算符,如 JLS 的第15.21.1节所述。作为布尔运算符, == 将输出一个布尔值。 =是 java 的赋值运算符,在这种特殊情况下,它是具有以下语法的复合赋值运算符:
布尔 f = (op1 op op2)
在翻译中 = 将运算的输出值分配给(op1 op op2)
左操作数,在本例中为f。
回顾您的示例,id == 1
(如果 id 的值为 1,则为 true,否则为 false)的输出被分配给retry。
简而言之,您的示例具有以下含义:只要 id 具有值 1 就重试。
代码可以这样写,那么就很容易理解了,你觉得呢?最后,感谢您给我机会回答问题!
boolean retry = (id == 1);