内部来讲,当你施放一个目标是像一个强类型的对象:当您取消装箱对象时,对象数据类型的存储位置在哪里,以便编译器可以执行强制转换?
User u = (User)o;
在哪里存储对象的类型?它是否存储在另一个位置或实际对象存储的内存块中?
(我不知道很多关于这个话题,所以我很可能会问一个问题,不会使完整意义上的,但我希望你得到它的要点)
内部来讲,当你施放一个目标是像一个强类型的对象:当您取消装箱对象时,对象数据类型的存储位置在哪里,以便编译器可以执行强制转换?
User u = (User)o;
在哪里存储对象的类型?它是否存储在另一个位置或实际对象存储的内存块中?
(我不知道很多关于这个话题,所以我很可能会问一个问题,不会使完整意义上的,但我希望你得到它的要点)
每头对象包含对最派生的实现类的类型的引用。很像C++中的“vtbl”。通常这将是一个“C”结构而不是Java对象。我相信Azul的(64位)Hotspot版本使用32位紧凑指针来缩短标头大小。
如果不详细说明,Java类的内部表示有一个名为constant pool的存储类和方法的描述符。这些符号链接最初是根据需要解析的(即在第一次访问时)。
从JVM规范,描述连接:
链接是采取一个类或接口 类型的 二进制形式并将其组合成Java虚拟机的运行时 状态的过程,所以它可以执行的 。一个类或 接口类型始终在链接的 之前加载。
因此,引用类型的实际类型信息与您引用它的类别分开存储。
如果你有兴趣,这里是什么类的信息看起来像一个链接:http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#1221
鸡蛋里挑骨头 - 编译器不进行类型转换。 – 2010-01-11 16:08:17