我试图在Java中调试涉及ClassCastException的问题.为了解决这个问题,我需要知道当我从Object转换为特定类型时会发生什么.任何人都可以向我解释Java转换运算符如何在Java级别和JVM级别上运行?
根据我的理解,如果在编译期间可以进行类型检查,则类型转换将在编译期间完成,并且不会产生任何运行时开销.
例如
public Child getChild() {
Parent o = new Child();
return (Child) o;
}
Run Code Online (Sandbox Code Playgroud)
类型转换是在编译期间还是在运行时完成的?
是否有任何一般规则来决定是否由javac编译器或VM完成类型转换?
我知道如何在 Java 中使用强制转换,但有一个更具体的问题;你能向我解释一下铸造是如何工作的吗(在内存中)?
在向上和向下转换时变量类型如何改变?
JVM 如何知道将此方法发送到此对象是安全的?
先感谢您。
假设我们有以下代码片段:
Cat cat = new Cat(); // The Cat class extends Animal
ArrayList<Animal> animalList = new ArrayList<>();
animalList.add(cat);
Run Code Online (Sandbox Code Playgroud)
cat是Cat指向类型对象的类型的引用Cat
animalList.get(0)是类型的引用Animal,指向与cat引用相同的对象.
cat == animalList.get(0)将评估,true因为他们都指向同一个对象.
但是,一个引用是类型Cat而另一个是类型Animal(列表中的位置0),所以我错误地说引用不完全相等,即使它们指向相同的内存位置?我是否过多地研究术语?