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

时间:2011-09-21 17:32:44

标签: java syntax null

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

c#示例:

bool? bPassed = null;

java有类似的东西吗?

8 个答案:

答案 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) {
  // ...
}

每种基本类型(intbooleanfloat,...)都有相应的包装类型(IntegerBoolean,{{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)

如果您使用的是对象,则允许null

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

这就是Java有Wrapper Class

的原因