2012-08-13 43 views
10

匆匆只是爲了獲得安心:
考慮以下是否爲最終的字符串調用了String.length()?

final String str = "This is the end"; 

str.length()在運行時進行評估或者是硬編碼爲15字節碼?

+3

源的'javac'編譯器是不可能對其進行優化,在JIT但是很可能,如果你運行的代碼足以溫暖起來向。 – 2012-08-13 08:23:21

+0

爲什麼在意?這可能是依賴於JVM實現的,但它可能在JVM和JVM之下很快。如果事實證明這是一個性能瓶頸(不太可能),分析器會顯示它。 – 2012-08-13 08:41:44

+0

字符串在Java中是不可變的。無論你是否使用變量'final',都沒有關係。 – Jesper 2012-08-13 08:47:52

回答

12

str.length()在運行時評估。 final表示參考值不能改變。它與字符串本身無關。

然而,如果你考慮的String的源代碼,你會看到length()返回一個字段的值,所以沒有計算髮生,價值OS僅僅是閱讀...

2

在字節碼的方法進行評價。

但是,調用該方法將有可能在jit compilation

代碼()內聯的string.length減方法如下:

public int length() { 
    return count; 
} 

我不認爲一個事實,即參考在這種情況下,聲明爲最終的字符串對內聯有任何影響。

+0

這就意味着...在運行時評估該值,然後由jit編碼? – MadProgrammer 2012-08-13 08:23:22

相關問題