我有double
类型的基元变量notional
:
private double notional;
现在我必须进行null
检查,如果是null
:,则抛出Exception
if (item.getNotional() == null) {
throw new Exception("Rfgygf");
}
但这不是正确的方法,因为基元类型不能是null
。请解释如何在Java中对notional
执行正确的null
检查。
有没有办法用double
来实现这一点,或者我需要将其转换为Double
?
基本数据类型(如double
和int
)不能为null。这就像int
不能是1.1
。
这意味着,您不需要担心原始数据类型中的无效性!它们是nevernull,因此不会抛出NullPointerException
s。我想您出现这种困惑的原因是您认为没有值的变量必须为null。但这是错误的。考虑这个类别:
public class MyClass { int i; }
现在您创建了一个类的对象:
MyClass obj = new MyClass();
现在打印obj.i
。会是什么?它不是空的,它是0
!
所有基元数据类型都有一个默认值。例如,int
的默认值为0,double
的默认值是0.0
,这解释了为什么上述obj.i
为0。char
的默认值是什么?是' '
!
请记住,基元数据类型不能是null
从不
从不
从不
基元类型不能有null值。只有引用类型可以具有null值。当您第一次声明double时,存储在里面的值是0。基本上,double类型的对象将始终存储一个值。如果您没有指定该值是什么,它将是一个0。
当你说时
private double notional;
它不是null
,而是0.0d
。基元值不能为null
。
JLS-4.12.1原始类型的变量表示(部分)
基元类型的变量始终包含该基元类型精确的基元值。
并且CCD_ 28不是基元值。解释见JLS-4.12.5。变量的初始值,表示(部分)
对于类型
double
,默认值为正零,即0.0d
。
正如其他答案所指出的,基元数据类型不能为null。
我建议您将Optional
类视为使用null表示无值的替代方法。Java 8包含Optional
,番石榴库中也有类似的版本。