黑马程序员技术交流社区

标题: 简单的问题 [打印本页]

作者: 湛添友    时间: 2014-4-12 14:45
标题: 简单的问题
为什么ClassCastException编译不会错,运行才会错
Object x=new Integer(2);
System.out.println((String)x);
作者: Tking    时间: 2014-4-12 14:49
父类引用志向子类对象,多态的表现
作者: Tking    时间: 2014-4-12 14:51
本来是num类型,你转成string肯定会搓搓
作者: nestor    时间: 2014-4-12 14:52
因为ClassCastException是运行时异常
运行时异常编译时不会报错

错误原因:Integer不能转换为基本类型:String
作者: ò壞尛孩    时间: 2014-4-12 15:27
x是Integer类的一个实例,不能强制转换成String
作者: linweiwen    时间: 2014-4-12 15:37
nestor 发表于 2014-4-12 14:52
因为ClassCastException是运行时异常
运行时异常编译时不会报错

String不是基本数据类型。
作者: 王峰峰    时间: 2014-4-12 15:59
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异常。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2