21

Sun の の実装のソース コードを見ると、Class.getSimpleName()呼び出すたびに String の新しいインスタンスを返すように見えることに気付くでしょう。ただし、Class クラスの他の多くの機能はキャッシュされます。

単純な名前の計算は簡単ではないようで、JavaDoc には毎回新しいインスタンスを返す必要があるとは書かれていないため、キャッシュの候補として適しているはずです。これがキャッシュされない設計上の理由があるのでしょうか?

多くのフレームワークは常に単純な名前を使用しており、これはキャッシュするのが非常に簡単であるためです。

4

3 に答える 3

3

おそらく、これは高価な方法ではないため、キャッシュしてもあまりメリットがありません。

String.substringchar[]安価な方法です。基になるものをコピーせずに再利用し、新しいStringオブジェクトはその配列へのオフセットと長さが異なるだけです。したがって、実際にかかるコストは、(1) オブジェクトの割り当て (Java ではかなり安価) と (2)lastIndexOf呼び出しだけです。その呼び出しは技術的には O(N) ですが、ここでの N はクラスの単純な名前であり、実際にはそれほど大きくはなりません。

キャッシュすることはできますが、より多くのメモリを犠牲にします。私の推測では、利益がコストを上回らないという、主観的ではあるが十分な知識に基づいた推測を誰かが行ったのではないかと思います。

于 2013-06-28T17:38:45.060 に答える