double 不能为 null !double和Double不一样?

大家一定遇到过这样的问题,返回 null 报错

以这个代码为例,这是一段用来查找数组中最大值,并返回的方法,在输入的数组为空或长度为0的不合法情况时,我们希望返回null,可这时却提示错误。 

简单来说,在返回类型为double的方法中,返回值不能为null

更简单来说,double 类型不能为 null

而这时,我们仅需一个小小的改变,就能解决问题,如下图

大家估计都没发现哪里变了

没错,就是把方法的返回值从double改为Double

虽然只是首字母换成了大写,但是却是两种完全不同的类型

一个是基本数据类型,一个是引用数据类型(包装类)。

一个不能为 null,一个可以为 null

public double getPrimitiveValue() {
    return 3.14; // 必须返回 double 值
}

public Double getWrapperValue() {
    return null; // 可以返回 null
}

下面,我们就详细了解一下 double 和 Double 的性质和区别

double

  • 类型double 是 Java 中的一种基本数据类型(Primitive Type)

  • 存储方式:直接存储数值。

  • 默认值:如果 double 是类的成员变量且未初始化,它的默认值是 0.0

  • 性能:由于是基本类型,double 的性能更高,因为它不需要额外的对象开销。

  • 使用场景:适用于需要高效计算的场景,比如科学计算、数学运算等

 Double

  • 类型Double 是 Java 中的一个包装类(Wrapper Class),属于引用类型。

  • 存储方式:存储的是对象的引用,实际数据存储在堆内存中。

  • 默认值:如果 Double 是类的成员变量且未初始化,它的默认值是 null

  • 功能Double 类提供了许多有用的方法,比如将字符串转换为 double 值(Double.parseDouble()),或者将 double 值转换为字符串(Double.toString())。

  • 使用场景:适用于需要对象特性的场景,比如集合(List<Double>)、泛型、或者需要处理 null 值的情况

 区别

double Double
类型 基本数据类型 引用类型(包装类)
储存方式 直接存储数值 存储对象的引用
默认值 0.0 null
性能 更高 较低(需要对象开销)
能否为null 不能 可以
功能 无额外方法 提供丰富的方法(如转换等)
使用场景 高效计算
集合、泛型、需要对象特性的场景

===============结束================

求点赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞~!