Java:你能像对待C中的整数0一样对待null吗?

Java:你能像对待C中的整数0一样对待null吗?,java,pointers,null,Java,Pointers,Null,我想检查一个对象有多少字段是空的。我可以做一些类似于: int numNotNull = !!(obj.a) + !!(obj.b) + !!(obj.c) + !!(obj.d); 如果null是指向0地址的指针,这将起作用,如C中所示。要更好地理解Java中的null是什么,请参阅。主要的讨论点是,作为引用null值的关键字,该值的类型是无名类型“null”: 还有一种特殊的null类型,表达式null的类型, 它没有名字。因为空类型没有名称,所以不可能 声明null类型的变量或强制转换为

我想检查一个对象有多少字段是空的。我可以做一些类似于:

int numNotNull = !!(obj.a) + !!(obj.b) + !!(obj.c) + !!(obj.d);

如果null是指向0地址的指针,这将起作用,如C中所示。

要更好地理解Java中的
null
是什么,请参阅。主要的讨论点是,作为引用
null
值的关键字,该值的类型是无名类型“null”:

还有一种特殊的null类型,表达式null的类型, 它没有名字。因为空类型没有名称,所以不可能 声明null类型的变量或强制转换为null类型。 null引用是null表达式唯一可能的值 类型。空引用始终可以强制转换为任何引用类型。在里面 实际上,程序员可以忽略null类型,而只是假装 空值只是一个特殊的文本,可以是任何引用 类型


因此无法在数值计算中直接使用它-这是一种类型不匹配。

另一个现在已经被接受的答案解释了
null
在Java中的含义

但是,如果您最初的目标是在一个线性代码中获得空字段的计数,则可以通过以下方式完成:

int numNotNull = (((numNotNull = 0) == 0 && obj.a == null && ++numNotNull < 0) || (obj.b == null && ++numNotNull < 0) || (obj.c == null && ++numNotNull < 0) || (obj.d == null && ++numNotNull < 0)) ? 0 : numNotNull;
int-numNotNull=((numNotNull=0)=0&&obj.a==null&++numNotNull<0)|(obj.b==null&&++numNotNull<0)|(obj.c==null&&++numNotNull<0)| |(obj.d==null&&++numNotNull<0))?0:numNotNull;

不,你不能。您必须执行
obj.a!=无效的1:0
用于每项检查。不,您不能。