还是全用代码说话比较直观一点。
先来看看Void类的实现:
/**
* The {@code Void} class is an uninstantiable placeholder class to hold a
* reference to the {@code Class} object representing the Java keyword
* void.
*
* @author unascribed
* @since JDK1.1
*/
public final
class Void {
/**
* The {@code Class} object representing the pseudo-type corresponding to
* the keyword {@code void}.
*/
public static final Class<Void> TYPE = Class.getPrimitiveClass("void");
/*
* The Void class cannot be instantiated.
*/
private Void() {}
}
把类的注释翻译一下,这个类的作用便一目了然。
* Void是一个不可实例化的占位符类。
* Void持有Java关键字void的Class对象。
下面用代码来看看Void和void的关系。
class VoidAndVoid {
public static void main(String[] args) {
Class<?> voidClass = void.class;
Class<?> voidClazz = Void.class;
Class<?> voidType = Void.TYPE;
System.out.println("void.class: " + voidClass + "\nVoid.class: " + voidClazz
+ "\nVoid.TYPE: " + voidType
+ "\nVoid.class is equal to void.class: " + voidClazz.equals(voidClass)
+ "\nVoid.TYPE is equal to void.class: " + voidType.equals(voidClass));
}
}
最后得到的结果如下:
void.class: void
Void.class: class java.lang.Void
Void.TYPE: void
Void.class is equal to void.class: false
Void.TYPE is equal to void.class: true
所以,Void.class不是void.class,Void.TYPE才是void.class,也就是对Java关键字void的Class对象的引用。