如果你有一个布尔变量:
boolean myBool = true;
我可以使用if / else子句获得相反的结果:
if (myBool == true)
myBool = false;
else
myBool = true;
有更简洁的方法吗?
答案 0 :(得分:91)
只需使用逻辑NOT运算符!
,就像您在条件语句中所做的那样(if
,for
,while
...)。您已使用布尔值,因此它会将true
翻转为false
(反之亦然):
myBool = !myBool;
答案 1 :(得分:40)
更酷的方式(如果你想设置变量),对于长度超过4个字符的变量名称,比myBool = !myBool
更简洁:
myBool ^= true;
顺便说一句,不要使用if (something == true)
,如果只做if (something)
就更简单了(与false比较相同,使用否定运算符)。
答案 2 :(得分:12)
对于boolean
来说,这很容易,Boolean
更具挑战性。
boolean
只有两种可能的状态:
true
和false
。Boolean
有3:Boolean.TRUE
,
Boolean.FALSE
或null
。 假设您刚刚处理boolean
(这是一种原始类型),那么最简单的方法就是:
boolean someValue = true; // or false
boolean negative = !someValue;
但是,如果您要反转Boolean
(对象),则必须注意null
值,否则最终可能会NullPointerException
。
Boolean someValue = null;
Boolean negativeObj = !someValue.booleanValue(); --> throws NullPointerException.
假设此值永远不为null,并且您的公司或组织没有针对自动(非)装箱的代码规则。实际上你可以把它写成一行。
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
({{3} })
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 : !someValue.booleanValue();
Boolean negativeObj = Boolean.valueOf(negative);
答案 3 :(得分:1)
最简洁的方法是不反转布尔值,当你想检查相反的条件时,只需在代码中使用!myBool。
答案 4 :(得分:-3)
myBool = myBool ? false : true;