Java是否允许可以为空的类型?

在C#中我可以使用变量来允许带有问号的空值。 我想要一个true / false / null结果。 我希望默认情况下将其设置为null。 测试结果将布尔值设置为true / false,但有时测试不会运行,并且java中的布尔值默认为false,因此测试的第3个选项会很好。

c#示例:

bool? bPassed = null; 

java有类似的东西吗?

没有。

相反,您可以使用盒装Boolean类(它是普通类而不是基本类型)或三值enum

您可以使用 :

Boolean b = null;

也就是Java中的java.lang.Boolean对象。

然后通过简单的赋值设置truefalse

Boolean b = true;Boolean b = false;

不,在java 原语中不能有空值,如果你想要这个function,你可能想要使用布尔代替。

是的你可以。

为了做到这一点,java为每个基本类型都有一个包装类。 如果使变量成为包装类的实例,则可以像任何普通变量一样将其赋值为null

代替:

 boolean myval; 

… 您可以使用:

 Boolean myval = null; 

您可以像这样分配:

 myval = new Boolean(true); 

……并像这样获得原始价值:

 if (myval.booleanValue() == false) { // ... } 

每个基本类型( intbooleanfloat ,…)都有相应的包装类型( IntegerBooleanFloat ,…)。

Java的自动装箱function允许编译器有时自动将包装器类型强制转换为其原始值,反之亦然。 但是,如果编译器无法弄清楚,您可以随时手动执行此操作。

在Java中,原始类型不能为空。 但是,您可以使用Boolean和朋友。

当然你可以使用布尔值,但为了让你的类型更具有“价值”或“无价值”,你可以很容易地制作出一个或多或少的包装类? C#中的类型:

 public class Nullable { 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 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

不,但您可以使用Boolean类而不是原始boolean类型来放置null

如果您正在使用object,则它允许null

如果您使用的是原始数据类型,则不允许使用null

这就是Java拥有Wrapper Class的原因