int i = 10 + 20;
是不是编译器会处理这段代码,加上10 + 20
,字节码和这行代码一样?
int i = 30;
我在哪里可以读到它?
int i = 10 + 20;
是不是编译器会处理这段代码,加上10 + 20
,字节码和这行代码一样?
int i = 30;
我在哪里可以读到它?
是的,您甚至可以自己验证。以一个小的 Java 文件为例:
public class Main {
public Main() {
int i = 10 + 20;
}
}
用 编译javac Main.java
,然后运行javap -c Main
反汇编:
Compiled from "Main.java"
public class Main extends java.lang.Object{
public Main();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: bipush 30
6: istore_1
7: return
}
清晰的在字节码中,可以看到编译器的优化:bipush 30
!
是的,它将根据 JLS 的要求进行简化(感谢@EJP 的精确度)。
如果您想要更多资源和 javac 优化,您应该查看Compiler optimizations或Java Compilers。
另一个有趣的事情是,即使您的代码在编译期间进行了优化,也会在运行时使用热点进行第二次优化。
资源 :
在同一主题上: