Ответ 1
Нет.
Вместо этого вы можете использовать класс в коробке Boolean
(который является обычным классом, а не примитивным типом) или трехзначный enum
.
В С# я могу переменную разрешить нули с вопросительным знаком. Я хочу получить истинный/ложный/нулевой результат. Я хочу, чтобы он был установлен в значение null по умолчанию. Логическое значение будет установлено в true/false результатом теста, но иногда тест не запускается, а логическое значение по умолчанию имеет значение false в java, поэтому 3-й вариант для проверки был бы приятным.
Пример С#:
bool? bPassed = null;
Есть ли у java что-то похожее на это?
Нет.
Вместо этого вы можете использовать класс в коробке Boolean
(который является обычным классом, а не примитивным типом) или трехзначный enum
.
вы можете использовать:
Boolean b = null;
то есть объект java.lang.Boolean
в Java.
И затем также установите true или false простым присваиванием:
Boolean b = true;
или
Boolean b = false;
Нет, в java примитивы не может иметь нулевого значения, если вы хотите эту функцию, вы можете использовать Boolean.
Да, вы можете.
Чтобы сделать это, java имеет класс-оболочку для каждого примитивного типа. Если вы сделаете свою переменную экземпляром класса-оболочки, ее можно присвоить null
точно так же, как любая нормальная переменная.
Вместо:
boolean myval;
... вы можете использовать:
Boolean myval = null;
Вы можете назначить его следующим образом:
myval = new Boolean(true);
... И получить его примитивное значение следующим образом:
if (myval.booleanValue() == false) {
// ...
}
Каждый примитивный тип (int
, boolean
, float
,...) имеет соответствующий тип оболочки (Integer
, boolean
, float
,...).
Java autoboxing позволяет компилятору иногда автоматически принуждать тип обертки к его примитивному значению и наоборот. Но вы всегда можете сделать это вручную, если компилятор не может понять это.
В Java примитивные типы не могут быть нулевыми. Однако вы можете использовать Boolean
и друзей.
Нет, но вы можете использовать класс Boolean
вместо примитивного типа Boolean
для размещения null
Конечно, вы можете пойти с Boolean, но для того, чтобы сделать более очевидным, что ваш тип может иметь "значение" или "нет значения", очень легко сделать класс-оболочку, который делает больше или меньше того, что делают типы ?
в С#:
public class Nullable<T> {
private T value;
public Nullable() { value = null; }
public Nullable(T init) { value = init; }
public void set(T v) { value = v; }
public boolean hasValue() { return value != null; }
public T value() { return value; }
public T valueOrDefault(T defaultValue) { return value == null ? defaultValue : value; }
}
Затем вы можете использовать его следующим образом:
private Nullable<Integer> myInt = new Nullable<>();
...
myInt.set(5);
...
if (myInt.hasValue())
....
int foo = myInt.valueOrDefault(10);
Обратите внимание, что что-то вроде этого стандартно, так как Java8: класс Optional
.
https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html
Если вы используете объект, он позволяет null
Если вы используете примитивные типы данных, он не разрешает null
В этой причине Java Класс Wrapper