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!

其他提示

是的。此编译器优化称为 恒定折叠. 。还有另一个称为编译器的优化 稀疏有条件恒定传播 那做类似的事情。

通常,不能保证给定的编译器实际上会折叠常数,但是如今,几乎每个语言的编译器都可以做到这一点。特别是 Java语言规范 要求在编译时评估恒定表达式。

是的,它将被简化 根据JLS的要求 (感谢@EJP的精度)。

如果您想要更多资源和Javac优化,则应查看 编译器优化 或者 Java编译器.

另一个有趣的事情是,即使您的代码在编译过程中进行了优化,在运行时也将进行第二次优化 热点.


资源 :

关于同一主题:

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top