为了账号安全,请及时绑定邮箱和手机立即绑定

java 对象类型信息 存在哪? 强制类型转化的时候需要执行哪些检查以确保程序的正确性?

java 对象类型信息 存在哪? 强制类型转化的时候需要执行哪些检查以确保程序的正确性?

牛魔王的故事 2019-04-03 11:07:51
java 对象类型信息 存在哪? 强制类型转化的时候需要执行哪些检查以确保程序的正确性?
查看完整描述

3 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

JVM维护了一个叫方法区的内存区域。方法区里保存了所用到的类型信息,如该类的全限定名,直接父类的全限定名,指向classloader的指针,指向Class对象的指针等等。

所有在堆上创建的对象都有一个指回方法区的指针,该指针指向了该对象的实际类型信息。

执行instanceof的时候,JVM就是通过查找方法区中的类型信息来获得结果的。在做类型转换时,JVM同样需要检查类型信息,以判断该转换是否合法

查看完整回答
反对 回复 2019-04-12
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

Java虚拟机把内存主要划分成 方法区、栈、堆等,类型信息是在class文件读入的时候就被放到方法区了的。
你说的检查类型,分为两种情况:
1)基本类型。JVM内部的基本类型和Java语言的基本类型大部分是一致的,因此编译时检查和转换就完成了。
2)引用类型。不仅要编译时检查,而且在运行时会对对象持有的方法区的指针从方法区中查看类型是否一致,检查时还会根据对象方法区中的超类型或接口类型的指针进行判断,保证可以转换为其超类型。

查看完整回答
反对 回复 2019-04-12
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

毫无疑问,对象信息肯定在堆内存啊
栈内存知识存储了对象的一个句柄
可以先用instanceof关键字判断对象是否是你准备转换的类型,然后再向下转换,比较安全

查看完整回答
反对 回复 2019-04-12
  • 3 回答
  • 0 关注
  • 1100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信