Подтвердить что ты не робот

Какой самый сжатый способ получить обратное значение логического значения Java?

Если у вас есть логическая переменная:

boolean myBool = true;

Я мог бы получить инверсию этого с предложением if/else:

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

Есть ли более краткий способ сделать это?

4b9b3361

Ответ 1

Просто назначьте с помощью логического оператора NOT !, как вы обычно делаете в своих операторах условий (if, for, while...). Вы уже работаете с булевым значением, поэтому он будет переворачивать true в false (и наоборот):

myBool = !myBool;

Ответ 2

Еще более холодный способ (более короткий, чем myBool = !myBool для имен переменных длиной более 4 символов, если вы хотите установить переменную):

myBool ^= true;

И, кстати, не используйте if (something == true), это проще, если вы просто выполняете if (something) (то же самое со сравнением с false, используйте оператор отрицания).

Ответ 3

При a boolean это довольно легко, boolean немного сложнее.

  • A boolean имеет только 2 возможных состояния: true и false.
  • A boolean, с другой стороны, имеет 3: Boolean.TRUE, Boolean.FALSE или null.

Предполагая, что вы просто имеете дело с boolean (который является примитивным типом), тогда самое простое:

boolean someValue = true; // or false
boolean negative = !someValue;

Однако, если вы хотите инвертировать a boolean (который является объектом), вы должны следить за значением null, или вы можете получить NullPointerException.

Boolean someValue = null;
Boolean negativeObj = !someValue.booleanValue(); --> throws NullPointerException.

Предполагая, что это значение никогда не является нулевым и что ваша компания или организация не имеет правил кодирования против автоматического (un) бокса. Вы можете просто написать его в одной строке.

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 : !someValue.booleanValue();
Boolean negativeObj = Boolean.valueOf(negative);

Ответ 4

Самый сжатый способ - не инвертировать логическое и просто использовать myBool позже в коде, если вы хотите проверить противоположное условие.

Ответ 5

myBool = myBool ? false : true;