类层次结构中的java强制转换
Object aThing = new Integer(25);
根据我的课本,表达式(Integer) aThing
将aThing
(type Object
)引用的对象类型强制转换为type Integer
只有当aThing
引用的对象实际上是类型Integer
时,强制转换操作才会成功;如果不是,则将使用ClassCastException
我不明白那粗体的句子在说什么。你能简要说明一下吗
什么是“被aThing
引用的对象”
你可以在下面搜索框中键入要查询的问题!
Object aThing = new Integer(25);
根据我的课本,表达式(Integer) aThing
将aThing
(type Object
)引用的对象类型强制转换为type Integer
只有当aThing
引用的对象实际上是类型Integer
时,强制转换操作才会成功;如果不是,则将使用ClassCastException
我不明白那粗体的句子在说什么。你能简要说明一下吗
什么是“被aThing
引用的对象”
# 1 楼答案
运行时的Java对象包含标识对象是哪个类的信息。当您尝试将对象强制转换为其他类型时,JRE将首先验证您实际上是在兼容对象之间进行强制转换。粗体的句子在一般意义上也不太正确;它还允许您将对象强制转换为该对象的任何超类或该对象实现的任何接口
关于可强制转换为超类的这一特殊部分就是为什么可以将
Integer
存储为Object
无论如何-Object
隐式地是所有类的超类这就是为什么您可以编写正确的语句,如:
请记住,java中的对象包含确定对象确切身份的运行时信息。向下转换到对象并不会删除此信息,这就是为什么java不会让您摆脱以下情况:
该语句将被编译,但您将在运行时得到一个
ClassCastException
,因为Integer
与String
不兼容行后:
aThing
是对存储值25的Integer
的引用。请再次记住,对象类标识在运行时维护,并且在强制转换时不会丢失# 2 楼答案
如果你有
那么
aThing
就真的是一个String
。在这种情况下,(Integer) aThing
将抛出一个ClassCastException
# 3 楼答案
现在因为
aThing
引用指向Integer object
。因此,您可以将该引用强制转换为Integer
。因为integer
引用可以指向Integer
对象但是,当您尝试将该引用类型转换为
String
引用时,您将得到ClassCastException
,因为字符串不是Integer
,因此不能包含对Integer
对象的引用# 4 楼答案
请注意,从一个类型转换为另一个类型仅在转换表示法位于继承树的一部分时有效
因此
Object x = (String)"X"
是有效的,因为“X”是字符串对象(Object)"X"
也是有效的Object y = (Integer) 1
是有效的。(对象)1是有效的但是,您不能将一种类型转换为完全不同的类型
Object x = (Integer)"X"
它无效,因为“X”不是类型Integer
另一件需要注意的事情是,这将起作用
上述内容有效,因为
A a
是类型为B
和IInterface
的对象。 你不能做的是A不是C类型,会抛出你得到的ClassCastException
aThing
引用的对象将是您初始化它的对象s持有指向“Hello World”对象的指针/引用
person持有对所创建对象的引用
# 5 楼答案
考虑此代码:
此代码将抛出
ClassCastException
,因为原始对象foo
不是Integer
对象。现在考虑这个代码:这段代码可以工作,因为原始对象
int1
是一个Integer
,所以如果它存储为更一般的类型,比如Object
,那么它就可以转换回原始类