【发布时间】:2014-04-24 07:05:38
【问题描述】:
正如我在一个线程 Java: Difference between Class.forName and ClassLoader.loadClass 中发现的那样,Class.forName() 将始终使用调用者的 ClassLoader,而 ClassLoader.loadClass() 可以指定不同的 ClassLoader
System.out.println(Class.forName("test.Employee").getClassLoader());
System.out.println(ClassLoader.getSystemClassLoader().loadClass("test.Employee").getClassLoader());
但是上面两行打印的结果是一样的
sun.misc.Launcher$AppClassLoader@7ced01
sun.misc.Launcher$AppClassLoader@7ced01
请说明原因。
【问题讨论】:
-
为什么期望结果会有所不同?
-
如果两种样式的类加载器不同,那么应该有两个不同的对象。
-
使用不同的类加载器加载类并比较类对象(不是类实例)是否相等。你会得到答案
-
@WhoAmI 我的问题不是针对 Employee 类对象的相等性,而是针对类加载器的对象。
-
在这两种情况下?那么调用者的类加载器是什么?
标签: java