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
对象。
然后通过简单的赋值设置true或false :
Boolean b = true;
或Boolean b = false;
不,在java 原语中不能有空值,如果你想要这个function,你可能想要使用布尔代替。
是的你可以。
为了做到这一点,java为每个基本类型都有一个包装类。 如果使变量成为包装类的实例,则可以像任何普通变量一样将其赋值为null
。
代替:
boolean myval;
… 您可以使用:
Boolean myval = null;
您可以像这样分配:
myval = new Boolean(true);
……并像这样获得原始价值:
if (myval.booleanValue() == false) { // ... }
每个基本类型( int
, boolean
, float
,…)都有相应的包装类型( Integer
, Boolean
, Float
,…)。
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的原因