A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 湛添友 中级黑马   /  2014-4-12 14:45  /  918 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么ClassCastException编译不会错,运行才会错
Object x=new Integer(2);
System.out.println((String)x);

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

6 个回复

倒序浏览
父类引用志向子类对象,多态的表现
回复 使用道具 举报
本来是num类型,你转成string肯定会搓搓
回复 使用道具 举报
因为ClassCastException是运行时异常
运行时异常编译时不会报错

错误原因:Integer不能转换为基本类型:String
回复 使用道具 举报
x是Integer类的一个实例,不能强制转换成String
回复 使用道具 举报
nestor 发表于 2014-4-12 14:52
因为ClassCastException是运行时异常
运行时异常编译时不会报错

String不是基本数据类型。
回复 使用道具 举报
ClassCastException简单介绍:ClassCastException是JVM在检测到两个类型间转换不兼容时引发的运行时异常。此类错误通常会终止用户请求。在执行任何子系统的应用程序代码时都有可能发生ClassCastException异常。通过转换,可以指示Java编译器将给定类型的变量作为另一种变量来处理。对基础类型和用户定义类型都可以转换。Java语言规范定义了允许的转换,其中大多数可在编译时进行验证。不过,某些转换还需要运行时验证。如果在此运行时验证过程中检测到不兼容,JVM就会引发ClassCastException异常。
    解答--> 它编译不会出错,是因为符合语法要求,因为Integer是继承Object类的,所以Object x=new Integer(2);这一句是不会出错的,多态性,而且String也是继承Object类的,所以System.out.println((String)x);这一句在编异时也是不出错的,但是x在堆内存是存放的Integer类型的,所以在运行时就出现了ClassCastException异常。

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马