Java允许空类型吗?

Java允许空类型吗?,java,syntax,null,Java,Syntax,Null,在C#中,我可以使用一个变量来允许带有问号的null。我想要一个真/假/空的结果。我希望在默认情况下将其设置为null。测试结果将布尔值设置为true/false,但有时测试不运行,并且在java中布尔值默认为false,因此第三个测试选项就很好了 c#示例: java是否有类似的功能?否,在java中不能有空值,如果您想要此功能,您可能需要使用它。您可以使用: Boolean b=null 也就是说,java中的java.lang.Boolean对象 然后还可以通过简单的赋值设置true或fa

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

c#示例:

java是否有类似的功能?

否,在java中不能有空值,如果您想要此功能,您可能需要使用它。

您可以使用:

Boolean b=null

也就是说,java中的
java.lang.Boolean
对象

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

Boolean b=true
Boolean b=false

在Java中,基元类型不能为null。但是,您可以使用和朋友。


相反,您可以使用装箱的
Boolean
类(这是一个普通类,而不是一个基元类型),或三值
enum

否,但您可以使用
Boolean
类而不是基元
Boolean
类型来放置
null

是的

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

而不是:

boolean myval;
。。。您可以使用:

Boolean myval = null;
您可以这样分配它:

myval = new Boolean(true);
if (myval.booleanValue() == false) {
  // ...
}
private Nullable<Integer> myInt = new Nullable<>();
...
myInt.set(5);
...
if (myInt.hasValue()) 
   ....
int foo = myInt.valueOrDefault(10);
。。。将其原始值如下所示:

myval = new Boolean(true);
if (myval.booleanValue() == false) {
  // ...
}
private Nullable<Integer> myInt = new Nullable<>();
...
myInt.set(5);
...
if (myInt.hasValue()) 
   ....
int foo = myInt.valueOrDefault(10);
每个基本类型(
int
boolean
float
,…)都有相应的包装类型(
Integer
boolean
float
,…)


Java的特性允许编译器有时自动将包装类型强制为其原语值,反之亦然。但是,如果编译器无法理解,您始终可以手动执行该操作。

如果您使用的是object,则它允许
null

如果您使用的是基元数据类型,则它不允许不允许
null


Java之所以有

当然可以使用Boolean,但为了更明显地说明您的类型可以有“value”或“no value”,很容易创建一个包装类,它或多或少地完成了C#中的
类型所做的工作:

公共类可为空{
私人T值;
public Nullable(){value=null;}
公共可空(T init){value=init;}
公共无效集(tv){value=v;}
公共布尔hasValue(){返回值!=null;}
公共T值(){return value;}
公共T值默认值(T defaultValue){return value==null?defaultValue:value;}
}
然后你可以这样使用它:

myval = new Boolean(true);
if (myval.booleanValue() == false) {
  // ...
}
private Nullable<Integer> myInt = new Nullable<>();
...
myInt.set(5);
...
if (myInt.hasValue()) 
   ....
int foo = myInt.valueOrDefault(10);
private Nullable myInt=new Nullable();
...
myInt.set(5);
...
if(myInt.hasValue())
....
int foo=myInt.valueOrDefault(10);
请注意,自Java8:the
Optional
类以来,类似这样的内容是标准的。

Java有可为空的引用类型,但没有可为空的原语。换句话说,“是”,因为相应的类的行为类似于C#等价物(C#版本是一个结构,Java版本是一个类除外)。@ToolmakerSteve:No;它们在很多方面都不一样。@SLaks“它们在很多方面都不一样”您能提供一些示例和/或相关链接吗?谢谢。@StéphaneGourichon:@谢谢,但这甚至没有提到C#。考虑到ToolmakerSteve的评论,你反驳了我的观点,我期待着类似的东西。