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

什么';获取Java布尔值的倒数的最简洁的方法是什么?,java,boolean,inverse,Java,Boolean,Inverse,如果您有一个布尔变量: boolean myBool = true; myBool ^= true; 我可以用if/else子句得到相反的结果: if (myBool == true) myBool = false; else myBool = true; 有更简洁的方法吗?只需使用逻辑NOT运算符赋值就像您在条件语句中所做的那样(if,for,while…)。您已经在使用布尔值,因此它会将true翻转为false(反之亦然): 一种更酷的方法(如果要设置变量,则对于长度超过4个字符的

如果您有一个布尔变量:

boolean myBool = true;
myBool ^= true;
我可以用if/else子句得到相反的结果:

if (myBool == true)
 myBool = false;
else
 myBool = true;

有更简洁的方法吗?

只需使用逻辑NOT运算符赋值
就像您在条件语句中所做的那样(
if
for
while
…)。您已经在使用布尔值,因此它会将
true
翻转为
false
(反之亦然):

一种更酷的方法(如果要设置变量,则对于长度超过4个字符的变量名,它比
myBool=!myBool
更简洁):


顺便说一句,不要使用
if(something==true)
,如果你只使用
if(something)
(与false相同,使用否定运算符)。

最简洁的方法是不反转布尔值,只使用!当您想检查相反的条件时,请稍后在代码中使用myBool。

对于
布尔值来说,这很容易,而
布尔值则更具挑战性

  • 布尔值
    只有两种可能的状态:
    true
    false
  • 另一方面,
    Boolean
    则有3:
    Boolean.TRUE
    Boolean.FALSE
    null
假设您只是处理一个
布尔值
(这是一个基本类型),那么最简单的方法是:

boolean someValue = true; // or false
boolean negative = !someValue;
但是,如果要反转
布尔值
(这是一个对象),则必须注意
null
值,否则可能会导致
null点异常

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 CAMSONS/代码>类<代码> BooLuNUTLIs<代码> >()< /P> 有些人更喜欢将其全部写出来,以避免apache依赖性

Boolean someValue = null; // or Boolean.TRUE or Boolean.FALSE;
Boolean negative = (someValue == null)? null : Boolean.valueOf(!someValue.booleanValue());

BoltClock有最佳答案;不过我想指出的是,“if(myBool==true)”本身已经非常健谈了;“if(myBool)”做的事情完全一样。@phisch:
if(!myBool!=true | | false)&&(!(myBool!=false | | true)==false))
myBool=(myBool)?假:真;(因为我无法抗拒使用三元形式的机会,即使这不是最简洁的)他忘记了大括号。如果(myBool==true){myBool=false;}…:-)<代码>如果(myBool==true)
,eek。相关:见鬼,是的,XOR+1正是这些小东西让无休止的编程变得更加有趣xDI希望找到一种简洁的语法,让我的同事能够直观地理解,而不必问StackOverflow问题来理解我在做什么。@faq:你完全没有抓住要点!编程的目的不是编写其他人可以理解的程序。它是为了编写如此复杂的程序,以至于任何阅读它的人都会立即对你写这篇文章的能力留下深刻印象@杰伊或者我的一个朋友会说:如果它很难写,那么它应该很难读!XD从评论复制到问题?两者之间没有区别吗?你是对的,但有时你需要这样做,如果它是一个标志,实际上改变了谢谢你的回答。我觉得被接受的答案确实更简洁。但我觉得你的答案更完整!感谢您介绍
boolean
boolean
这确实更简洁。但是我想指出的是,
bvdb
的答案涉及到正确处理
Boolean
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);
Boolean someValue = null; // or Boolean.TRUE or Boolean.FALSE;
Boolean negativeObj = BooleanUtils.negate(someValue);
Boolean someValue = null; // or Boolean.TRUE or Boolean.FALSE;
Boolean negative = (someValue == null)? null : Boolean.valueOf(!someValue.booleanValue());