在C#中我可以使用变量来允许带有问号的空值。我想要一个true / false / null结果。我希望默认情况下将其设置为null。测试结果将布尔值设置为true / false,但有时测试不会运行,并且java中的布尔值默认为false,因此测试的第3个选项会很好。
c#示例:
bool? bPassed = null;
java有类似的东西吗?
答案 0 :(得分:38)
没有
相反,您可以使用带框的Boolean
类(普通类而非原始类型)或三值enum
。
答案 1 :(得分:14)
你可以使用:
Boolean b = null;
即Java中的java.lang.Boolean
对象。
然后通过简单的作业设置 true 或 false :
Boolean b = true;
要么
Boolean b = false;
答案 2 :(得分:8)
是的,你可以。
为了做到这一点,java为每个基本类型都有一个包装类。如果您将变量作为包装类的实例,则可以像任何普通变量一样为其分配null
。
而不是:
boolean myval;
......你可以使用:
Boolean myval = null;
您可以像这样分配:
myval = new Boolean(true);
......并且像这样得到它的原始价值:
if (myval.booleanValue() == false) {
// ...
}
每种基本类型(int
,boolean
,float
,...)都有相应的包装类型(Integer
,Boolean
,{{1 },...)。
Java的autoboxing功能允许编译器有时自动将包装器类型强制转换为其原始值,反之亦然。但是,如果编译器无法解决问题,您可以随时手动执行此操作。
答案 3 :(得分:7)
不,在java primitives中不能包含空值,如果您需要此功能,则可能需要使用Boolean。
答案 4 :(得分:5)
在Java中,原始类型不能为空。但是,您可以使用Boolean
和朋友。
答案 5 :(得分:5)
当然你可以使用布尔值,但是为了使你的类型更具有“值”或“无值”更明显,很容易使包装类更多或更少地执行?
类型在C#中做:
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
答案 6 :(得分:2)
否,您可以使用Boolean
类而非原始boolean
类型来null
答案 7 :(得分:1)