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

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

boolean myBool = true;

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

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

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

5 ответов

Решение

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

myBool = !myBool;

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

myBool ^= true;

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

Для boolean это довольно легко, Boolean немного сложнее.

  • boolean только 2 возможных состояния: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.

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

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);

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

myBool = myBool ? false : true;
Другие вопросы по тегам