2010-10-09 21 views

回答

11

是的,你甚至可以驗證它自己。拿一個小的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

4

是的,它將被簡化爲as required by the JLS(感謝@EJP的精度)。

如果你想要更多的資源和javac優化,你應該看看Compiler optimizationsJava Compilers

另一個有趣的事情是,即使您的代碼在編譯過程中進行了優化,第二次優化也將在運行期間以hotspot完成。


資源:

關於同一主題:

+1

您可以依靠評估常量表達式的Java編譯器。這是規範要求的,例如,CE標籤可以是合法的。 – EJP 2010-10-09 23:13:56

+0

@EJP,我不是100%確定的,所以我會改變我的答案,但是你能否提供一個關於這個特定優化的規範的鏈接? – 2010-10-09 23:15:45

+3

在案件表達式中允許CE的事實使其成爲強制性的。見15.28常量表達式。 – EJP 2010-10-09 23:27:37