匆匆只是爲了獲得安心:
考慮以下是否爲最終的字符串調用了String.length()?
final String str = "This is the end";
是str.length()
在運行時進行評估或者是硬編碼爲15字節碼?
匆匆只是爲了獲得安心:
考慮以下是否爲最終的字符串調用了String.length()?
final String str = "This is the end";
是str.length()
在運行時進行評估或者是硬編碼爲15字節碼?
str.length()
是在運行時評估。 final
表示參考值不能改變。它與字符串本身無關。
然而,如果你考慮的String
的源代碼,你會看到length()
返回一個字段的值,所以沒有計算髮生,價值OS僅僅是閱讀...
在字節碼的方法進行評價。
但是,調用該方法將有可能在jit compilation
代碼()內聯的string.length減方法如下:
public int length() {
return count;
}
我不認爲一個事實,即參考在這種情況下,聲明爲最終的字符串對內聯有任何影響。
這就意味着...在運行時評估該值,然後由jit編碼? – MadProgrammer 2012-08-13 08:23:22
str.length()
在String constructor
計算並保存在private final int count;
,str.length()
只是返回count
變量。我只是檢查這裏http://www.docjar.com/html/api/java/lang/String.java.html
源的'javac'編譯器是不可能對其進行優化,在JIT但是很可能,如果你運行的代碼足以溫暖起來向。 – 2012-08-13 08:23:21
爲什麼在意?這可能是依賴於JVM實現的,但它可能在JVM和JVM之下很快。如果事實證明這是一個性能瓶頸(不太可能),分析器會顯示它。 – 2012-08-13 08:41:44
字符串在Java中是不可變的。無論你是否使用變量'final',都沒有關係。 – Jesper 2012-08-13 08:47:52