心の安らぎを得るための急ごしらえ:
次のことを考慮して
final String str = "This is the end";
str.length()
実行時に評価されますか、それともバイトコードで15としてハードコードされていますか?
str.length()
で計算されString constructor
て保存されprivate final int count;
、変数str.length()
を返すだけです。count
ここでソースを確認しましたhttp://www.docjar.com/html/api/java/lang/String.java.html
str.length()
実行時に評価されます。final
参照の値を変更できないことを意味します。文字列自体とは関係ありません。
ただし、ソースコードを調べると、フィールドの値String
を返すことがわかるlength()
ため、計算は行われず、値は単に読み取られます...
バイトコードでは、メソッドが評価されます。
ただし、メソッド呼び出しは、 jit コンパイル中にインライン化される可能性があります。
String.length() メソッドのコードは次のとおりです。
public int length() {
return count;
}
この場合、文字列への参照が final と宣言されているという事実がインライン化に関係しているとは思いません。