使用Byte.class时的类加载行为

der*_*oni 0 java jvm classloader

当我在Java中进行大量类型检查时,如下所示:

if (clazz.equals(Byte.class) <dosomething>
if (clazz.equals(Integer.class) <dosomething>
...
Run Code Online (Sandbox Code Playgroud)

JVM是否加载了所有这些类(Byte,Integer?)如果确实如此,是否还有其他方法可以在不加载一堆我甚至不需要的类的情况下进行类类型检查?

Ern*_*ill 6

是的,使用.class将加载类,但不要担心这些 - 在java.lang程序运行之前已经加载了所有内容,因为这些类都是由JVM本身使用,或者由其他API类使用是预装的.

如果你想在没有加载课程的情况下检查课程,你可以做类似的事情

if (clazz.getName().equals("com.foo.MyClass")) ...
Run Code Online (Sandbox Code Playgroud)

但那会相当脆弱; 除非有充分的理由,否则我会避免它.

无论如何,-verbose:class有时启动Java 以查看为您预先加载的所有类!