classloader与equals()的关系

最常规的equals()方法我就不过多的解释了。这两天我学习了classloader,对其有了一定的了解,其中有一个命名空间的概念:每个classloader实例维持了一个独有的名称空间。于是我就想了解:不同的classloader所加载的类并非是同一个类,话不多说,具体见代码:

package com.cxz.classloader;

import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;

public class Tester {

public static void main(String[] args) throws MalformedURLException,
InstantiationException, IllegalAccessException,
ClassNotFoundException {
URL url = null;

url = new URL("file:///E:\\classes\\");

URL[] urls = new URL[1];
urls[0] = url;
URLClassLoader urlClsLdr1 = new URLClassLoader(urls);
Compare compare1 = (Compare) urlClsLdr1.loadClass(
"com.cxz.classloader.Sample").newInstance();

Compare compare3 = (Compare) urlClsLdr1.loadClass(
"com.cxz.classloader.Sample").newInstance();

URLClassLoader urlClsLdr2 = new URLClassLoader(urls);
Compare compare2 = null;
compare2 = (Compare) urlClsLdr2.loadClass("com.cxz.classloader.Sample")
.newInstance();

System.out.println(compare1.getClass().equals(compare2.getClass()));
}

}

输出显示:不同classloader加载的class根本就不同。所以equals方法也不可能通过。从jvm的角度而言,这两个同一个包、同名的类也是不同的。
阅读更多
文章标签: Java .net JVM
个人分类: J2SE
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭