当我创建 Animal x=new Dog();
并且我想使用 Dog 函数时,我必须强制转换吗? ((Dog)x).bark();
所以假设我会在 for 循环中多次使用它会导致性能降低吗?除了每次都转换之外还有其他方法吗?
最佳答案
像一个 Actor
Dog dog = (Dog) animal;
是所谓的“Check”类型转换。所以在运行时它是一个简单的 if 语句(是动物实现 Dog 的实例),它抛出一个 ClassCastException
。因此,如果转换正常,至少它不会提供任何合理的性能开销,但如果转换失败,则会抛出异常,并且异常处理是一种消耗性能的“操作”。
因此,如果您转换某些东西,并且转换不会失败,我相信不存在性能问题。但是,如果您的转换经常失败,那么您应该稍微更改一下算法。
关于Java 初学者 : does casting result in lower performance by any mean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4545870/