基本类型类的用途/目的是什么?


问题内容

我最近了解到JVM中有原始类型的表示形式。例如int.classdouble.class甚至一个void.class

我不明白的是 为什么会有
这些。它们似乎没有发挥任何功能性作用。使用反射,我搜索了所有类,它们没有构造函数,没有方法并且没有字段。出于所有目的和目的,它们似乎是空的和无用的。基本类型变量甚至都不是其各自类的实例,如以下返回false所示:

int a = 3;
int.class.isInstance(a);

那么为什么它们存在呢?它们必须达到某种目的,也许是为了编译器之类的,但无论它是什么,完全超出了我的范围。甚至int.classInteger
API中
也有明确的引用(同样对于每种基本类型及其各自的包装对象)。在JLS中,我无法找到任何关于它们存在的参考,更不用说它们的使用了。


问题答案:

我不明白的是为什么会有这些。

考虑以下:

public int foo() {
    return 0;
}

...

Method method = someClass.getDeclaredMethod("foo");
Class<?> clazz = method.getReturnType();

没有的Class表示int,以上内容将返回什么?它不应该返回,Integer.class因为它们 不是
同一件事。(想象一下,试图区分重载的方法,一个是重载的方法,另一个int是带Integer参数的方法。)

在通过反射调用参数时,我曾经使用过这些类来提供参数的默认值。基于参数类型,我使用null了任何引用类型,并且为每种原始类型使用了一些(显然是带盒装的)原始值。