如果你有一个布尔变量:
boolean myBool = true;
我可以用 if/else 子句得到相反的结果:
if (myBool == true)
myBool = false;
else
myBool = true;
有没有更简洁的方法来做到这一点?
只需使用逻辑 NOT 运算符进行分配,!
就像您在条件语句 ( if
, for
, while
...) 中所做的那样。您已经在使用布尔值,因此它会翻转true
为false
(反之亦然):
myBool = !myBool;
一种更酷的方式(myBool = !myBool
如果要设置变量,这比长度超过 4 个字符的变量名更简洁):
myBool ^= true;
顺便说一句,不要使用if (something == true)
,如果你这样做会更简单if (something)
(与false比较相同,使用否定运算符)。
对于 aboolean
这很容易, aBoolean
更具挑战性。
boolean
只有 2 种可能的状态:
true
和false
。Boolean
另一方面,A有 3 Boolean.TRUE
:
Boolean.FALSE
或null
。假设您只是在处理 a boolean
(这是一种原始类型),那么最简单的事情是:
boolean someValue = true; // or false
boolean negative = !someValue;
但是,如果你想反转 a Boolean
(它是一个对象),你必须注意它的null
值,否则你可能会得到 a NullPointerException
。
Boolean someValue = null;
Boolean negativeObj = !someValue.booleanValue(); --> throws NullPointerException.
假设此值永远不会为空,并且您的公司或组织没有针对自动(取消)装箱的代码规则。您实际上可以将其写在一行中。
Boolean someValue = Boolean.TRUE; // or Boolean.FALSE
Boolean negativeObj = !someValue;
但是,如果您也想照顾这些null
价值观。然后有几种解释。
boolean negative = !Boolean.TRUE.equals(someValue); //--> this assumes that the inverse of NULL should be TRUE.
// if you want to convert it back to a Boolean object, then add the following.
Boolean negativeObj = Boolean.valueOf(negative);
另一方面,如果您想在反转后null
保留null
,那么您可能需要考虑使用apache commons
该类BooleanUtils
(请参阅 javadoc)
Boolean someValue = null; // or Boolean.TRUE or Boolean.FALSE;
Boolean negativeObj = BooleanUtils.negate(someValue);
有些人更喜欢把它全部写出来,以避免对 apache 的依赖。
Boolean someValue = null; // or Boolean.TRUE or Boolean.FALSE;
Boolean negative = (someValue == null)? null : Boolean.valueOf(!someValue.booleanValue());
最简洁的方法是不反转布尔值,当您想检查相反的条件时,只需在代码中稍后使用 !myBool 即可。
myBool = myBool ? false : true;