相关:What does casting do at compiler/machine level?
假设我有自定义类型。类型A是类型B的子类型。
最初,我的变量是输入广告类型A.然后我将其转换为类型B.
大多数编译器,特别是Java,是否保留了变量曾经是A类的事实的“记忆”?因此,特定于类型A的变量的操作对于类型B的变量仍然有效吗?
//感谢大家的评论。 Is it possible to call subclasses' methods on a superclass object? - 我在这里找到了答案。我不认为我最初问的是正确的问题,但每个人的有用评论都让我以不同的方式思考这个问题并最终得到我的答案。
答案 0 :(得分:1)
Casting实质上是说“假装这个变量只适用于这个调用”。底层变量/对象不会更改,也不会丢失其类型声明。 Java是一种静态的强类型语言。
答案 1 :(得分:1)
编译器在演员表之后不会保留信息,它只是假设您知道自己在做什么。然而,对象本身在演员之后没有变化。所有对象都在内部包含对其类的引用,可通过Object#getClass()
访问。在演示期间的运行时,虚拟机通过检查类的兼容性来验证强制转换是否有效,如果它不是有效的强制转换,则抛出ClassCastException。
答案 2 :(得分:0)
你应该尝试一下,但是在你发布的情况下,编译器不会捕获它。它会在运行时出错。
但是我相信如果你试图做这样的事情:
String foo = "Hello";
Integer val = (Integer) foo;
我认为编译器会捕获它,因为String 永远不会是整数