qin*_*oon 9 java casting javac
根据我的理解,如果在编译期间可以进行类型检查,则类型转换将在编译期间完成,并且不会产生任何运行时开销.
例如
public Child getChild() {
Parent o = new Child();
return (Child) o;
}
Run Code Online (Sandbox Code Playgroud)
类型转换是在编译期间还是在运行时完成的?
是否有任何一般规则来决定是否由javac编译器或VM完成类型转换?
其实,这种情况有三种可能:
javac器可以执行优化。我希望它是选项 1. 或 2.,但这可能是特定于平台的。
事实上,在我的系统上,字节码没有优化。如果要进行任何优化,将由 JIT 编译器来完成。(这符合我所听到的……大多数 Java 字节码编译器在生成字节码之前很少进行优化。)
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
0: aload_0
1: invokespecial #8; //Method java/lang/Object."<init>":()V
4: return
public Child getChild();
Code:
0: new #16; //class Child
3: dup
4: invokespecial #18; //Method Child."<init>":()V
7: astore_1
8: aload_1
9: checkcast #16; //class Child
12: areturn
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
473 次 |
| 最近记录: |