为什么 double.class 不等于 java.lang.Double.class?

Why doesn't double.class equal java.lang.Double.class?

既然原始双精度数用 java.lang.Double class 表示,double.class 不应该等于 java.lang.Double.class 吗? (这当然也发生在其他原始类型上)

System.out.println(double.class == Double.class);

输出:

Result: false

Double.class是包装类型Double对应的class对象。 double 实际上不是 class,但 double.class 是反射中用来指示参数或 return 类型具有原始类型 double.[= 的对象15=]

double是原始类型,Double是class类型。在 Double class 上有一个 属性 叫做 TYPE:

例如 System.out.println(double.class == Double.TYPE); 打印 true。

它们是 Class<Double> 的两个不同实例。这通常不会发生(对于普通对象),但是对于包装器类,这正是反射中区分原始类型和包装器类型字段的方式。