10

心の安らぎを得るための急ごしらえ:
次のことを考慮して

final String str = "This is the end";

str.length()実行時に評価されますか、それともバイトコードで15としてハードコードされていますか?

4

3 に答える 3

13

str.length()で計算されString constructorて保存されprivate final int count;、変数str.length()を返すだけです。countここでソースを確認しましたhttp://www.docjar.com/html/api/java/lang/String.java.html

于 2012-08-13T08:24:44.083 に答える
12

str.length() 実行時に評価されます。final参照の値を変更できないことを意味します。文字列自体とは関係ありません。

ただし、ソースコードを調べると、フィールドの値Stringを返すことがわかるlength()ため、計算は行われず、値は単に読み取られます...

于 2012-08-13T08:23:10.497 に答える
2

バイトコードでは、メソッドが評価されます。

ただし、メソッド呼び出しは、 jit コンパイル中にインライン化される可能性があります。

String.length() メソッドのコードは次のとおりです。

public int length() {
    return count;
}

この場合、文字列への参照が final と宣言されているという事実がインライン化に関係しているとは思いません。

于 2012-08-13T08:22:02.423 に答える