A类不等于A类

Tho*_*ler 5 java classloader java-ee

我们有一个Map带有Class对象的cache()TestClass.另一个类加载器TestClass再次在运行时初始化/加载,因此下面的代码会抛出一个ClassCastException:

TestClass obj1 = (TestClass)map.get("key"); // throws a ClassCastException
Run Code Online (Sandbox Code Playgroud)

转换为同一个类时出现ClassCastException

好吧,到目前为止,我确实理解这个问题.

所以,我试图找到背景信息为什么TestClass.class不等于TestClass.class.我假设不同的类加载器为ReferenceType设置了不同的id?有谁能向我解释背景?

我找到的最佳页面:http: //www.objectsource.com/j2eechapters/Ch21-ClassLoaders_and_J2EE.htm

Pét*_*rök 8

是的,您的研究指向正确的方向:由不同类加载器加载的相同类定义被JVM视为两个不同的类.因此他们之间的铸造失败了ClassCastException.

我认为差异仅仅是因为有两个不同的类令牌对象在起作用.它必须是这样的,因为不同加载器加载的类实际上可能是同一类的不同版本.众所周知,每个类的类令牌都是唯一的(在同一个类加载器领域内,即).如果JVM开始通过各种属性而不是物理相等(==)来比较类令牌,它会打开一堆蠕虫.