在内部,当您将对象强制转换为强类型对象时,如:
User u = (User)o;
存储对象的类型在哪里?它是存储在另一个位置还是存储实际对象的内存块中?
(我对这个话题知之甚少,所以我很可能会问一个没有完全意义的问题,但我希望你能得到它的要点)
答案 0 :(得分:3)
每个对象的标头包含对派生程度最高的实现类的类型的引用。很像C ++中的“vtbl”。通常,这将是“C”结构而不是Java对象。我相信Azul(64位)版本的Hotspot使用32位紧凑型指针来缩短标题大小。
答案 1 :(得分:0)
在没有详细说明你的情况下,Java类的内部表示有一个名为constant pool的东西,它存储类和方法的描述符。这些符号链接最初是按需解决的(即首次访问时)。
从JVM规范,描述链接:
链接是获取的过程 类或接口的二进制形式 输入并将其组合到运行时中 Java虚拟机的状态,所以 它可以被执行。一个班级或 接口类型始终加载之前 它是联系在一起的。
因此,引用类型的实际类型信息与您引用它的类分开存储。
如果您有兴趣,可以在此处找到类别信息的链接:http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#1221