Если у вас есть логическая переменная:
boolean myBool = true;
Я мог бы получить обратное с помощью предложения if / else:
if (myBool == true)
myBool = false;
else
myBool = true;
Есть ли более лаконичный способ сделать это?
Если у вас есть логическая переменная:
boolean myBool = true;
Я мог бы получить обратное с помощью предложения if / else:
if (myBool == true)
myBool = false;
else
myBool = true;
Есть ли более лаконичный способ сделать это?
Просто назначьте, используя логический оператор НЕ !
, как вы обычно делаете это в своих операторах условий (if
, for
, _4 _...). Вы уже работаете с логическим значением, поэтому оно перевернет true
на false
(и наоборот):
myBool = !myBool;
bvdb
касается правильной обработки Boolean
- person buzzsawddog; 03.07.2014
Еще более крутой способ (более краткий, чем myBool = !myBool
для имен переменных длиной более 4 символов, если вы хотите установить переменную):
myBool ^= true;
И, кстати, не используйте if (something == true)
, проще, если вы просто сделаете if (something)
(то же самое со сравнением с false, используйте оператор отрицания).
myBool = (myBool == false);
?
- person Jorn; 11.10.2010
myBool = !myBool
позволяет только точно перевернуть логическое значение. Но myBool ^= true
можно обобщить как myBool ^= reverse
, что позволяет вам выборочно инвертировать его логическое значение.
- person Paul Schwarz; 02.09.2018
Для 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
_22 _ (см. 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 : Boolean.valueOf(!someValue.booleanValue());
boolean
И Boolean
- person buzzsawddog; 03.07.2014
Самый краткий способ - не инвертировать логическое значение, а просто использовать! MyBool позже в коде, когда вы хотите проверить противоположное условие.
if ((!myBool != true || false) && (!(myBool != false || true) == false))
- person BoltClock   schedule 11.10.2010if (myBool == true)
, eek. Связанный: Это плохо явно сравнивать с логическими константами, например if (b == false) в Java? - person BalusC   schedule 11.10.2010myBool = Boolean.FALSE.equals(myBool);
- person fortran   schedule 19.02.2013