获得Java布尔值的倒数的最简洁方法是什么?

faq*_*faq 34 java boolean inverse

如果你有一个布尔变量:

boolean myBool = true;
Run Code Online (Sandbox Code Playgroud)

我可以通过if/else子句获得相反的结果:

if (myBool == true)
 myBool = false;
else
 myBool = true;
Run Code Online (Sandbox Code Playgroud)

有没有更简洁的方法来做到这一点?

Bol*_*ock 92

刚分配使用逻辑运算符不!喜欢你往往会在你的条件语句(做if,for,while...).你已经使用了一个布尔值,所以它会翻转truefalse(反之亦然):

myBool = !myBool;
Run Code Online (Sandbox Code Playgroud)

  • 这确实更简洁.但我想指出,`bvdb`的答案处理正确处理`Boolean` (2认同)

for*_*ran 41

更酷的方式(myBool = !myBool如果要设置变量,则比长度超过4个字符的变量名称更简洁):

myBool ^= true;
Run Code Online (Sandbox Code Playgroud)

顺便说一句,不要使用if (something == true),如果你这样做就更简单if (something)(与false相比,使用否定运算符).

  • @faq:你完全错过了这一点!编程的目标不是编写别人可以理解的程序.它是编写如此复杂的程序,任何人阅读它都会立刻给你留下深刻印象,你必须有多聪明才能写出来.:) (31认同)
  • 哎呀呀!+1 (11认同)
  • 这些是让无穷无尽的编程时间更有趣的xD的小事 (8认同)
  • @Jay或我的朋友会说:如果难以写,那就应该难以阅读!XD (7认同)
  • 我希望找到一种简洁的语法,我的同事可以直观地理解,而无需在StackOverflow上提出问题来理解我在做什么. (4认同)
  • 你不是在积极思考!考虑一下他们试图了解你在做什么后浏览SO会得到的启示!!! :-P (3认同)
  • 怎么样`myBool =(myBool == false);`? (3认同)
  • 这个解决方案很简洁。说“myBool = !myBool”允许您仅精确翻转布尔值。但是,“myBool ^= true”可以概括为“myBool ^=verse”,它允许您有选择地反转其布尔值。 (2认同)

bvd*_*vdb 13

对于boolean它来说非常简单,一个Boolean更具挑战性.

  • A boolean只有两种可能的状态: truefalse.
  • Boolean在另一方面,具有3: Boolean.TRUE, Boolean.FALSEnull.

假设您只是处理a boolean(这是一种原始类型),那么最简单的方法是:

boolean someValue = true; // or false
boolean negative = !someValue;
Run Code Online (Sandbox Code Playgroud)

但是,如果要反转a Boolean(对象),则必须注意该null值,否则最终可能会出现NullPointerException.

Boolean someValue = null;
Boolean negativeObj = !someValue.booleanValue(); --> throws NullPointerException.
Run Code Online (Sandbox Code Playgroud)

假设此值永远不为null,并且您的公司或组织没有针对自动(非)装箱的代码规则.实际上你可以把它写成一行.

Boolean someValue = Boolean.TRUE; // or Boolean.FALSE
Boolean negativeObj = !someValue;
Run Code Online (Sandbox Code Playgroud)

但是,如果您确实想要处理这些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);
Run Code Online (Sandbox Code Playgroud)

另一方面,如果你想在反演后null留下来null,那么你可能要考虑使用apache commons该类BooleanUtils(参见javadoc)

Boolean someValue = null; // or Boolean.TRUE or Boolean.FALSE;
Boolean negativeObj = BooleanUtils.negate(someValue);
Run Code Online (Sandbox Code Playgroud)

有些人宁愿把它全部写出来,以避免产生apache依赖.

Boolean someValue = null; // or Boolean.TRUE or Boolean.FALSE;
boolean negative = (someValue == null)? null : !someValue.booleanValue();
Boolean negativeObj = Boolean.valueOf(negative);
Run Code Online (Sandbox Code Playgroud)