問題タブ [string-pool]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
string - 文字列プール オブジェクト作成の混乱
以下のようなことを試しました:
出力は次のとおりです。
s1==s2
true
s2==s3
false
s1==s3
false
s2
とs1
が に等しくないのはなぜs3
ですか? に対して新しい参照が生成されるのはなぜs3
ですか?
java - 文字列参照比較 == とインターンについて混乱する
文字列定数で文字列のインターンメソッドを使用する必要がある場合にこれを読みましたが、文字列 == ではまだあまり明確ではありません intern() と比較してください。いくつかの例があります。誰かがこれをよりよく理解するのを手伝ってくれますか?
java - 文字列プールの管理
Strings
不変オブジェクトであり、文字列プールに格納されます。アプリケーションで、new
演算子を使用して文字列が作成されていないとします。この場合、オブジェクトの等価性チェックの代わりにメソッドを使用する必要がありますかequals
? 上記の質問の答えはおそらく「はい」であり、文字列プールのサイズと関係があると思います。String プールはどのように管理されますか? メモリが限られているので、文字列プールも一定のサイズを持っているように感じます。プールがいっぱいになると、使用頻度の低い文字列を破棄して、キャッシュのように機能しますか?==
String
LRU
貴重な情報を提供してください。
私の質問は、文字列プールのサイズに関するものではありません。私の質問は、 new 演算子を使用して作成された文字列がない場合、 == を使用すると常に安全になるということです。このステートメントは正しいですか、この場合、同じ文字列文字を持つ 2 つの文字列参照が false を返す可能性があります。常に equals メソッドを使用する必要がある設計は知っていますが、言語仕様を知りたいだけです。
java - Java Strings: プライベート静的 vs ローカル変数のパフォーマンス
private final static String
メソッドにアクセスするたびに「初期化」する必要があるローカル文字列変数を使用する場合と比較して、Java で使用することによるパフォーマンス上の利点はありますか?
文字列を使用することは、クラスのさまざまな部分で再利用される定数には良い習慣だと思いますprivate static final
が、文字列が 1 つのメソッド、1 つの場所でのみ使用される場合、他のメソッドは関係ないという非常に具体的な理由があります。について、私は実際にはクラスの内部インターフェイスをクリーンに保ち、プライベートメンバーを減らし、ローカル変数のみを使用することを好みます。
Java に文字列のインターンがあり、実際には引用符 ( String s = "some string"
) を使用して宣言された各文字列の 1 つのコピーを含むプールを保持している場合、メソッドにアクセスするたびに変数を宣言/初期化/割り当てる必要があるため、実際にはパフォーマンスが低下します。 vs静的文字列を使用する?
もう少し明確にするために、またはの使用に違いはありますSS
かLS
?
java - == Enum name() と toString() で
toString() と name() が同じ文字列を参照している理由を誰か説明できますか? == を使用して文字列リテラルと比較すると、すべて合格です! 列挙型名は JVM の文字列プールでどのように機能しますか?
java - Java の文字列プールは LRU キャッシュのように動作しますか?
文字列は不変であり、文字列プールで管理されます。このプールがどのように管理されているか知りたいです。アプリケーションで多数の文字列リテラルが使用されている場合 (追加、置換操作などの変更が多い場合は文字列ビルダーを使用する必要があることを理解しています)、プールは新しい文字列オブジェクトを何度も再作成しないことで、アプリケーションのパフォーマンスを向上させます。ただし、プールに存在する同じオブジェクトを使用すると、文字列は不変であり、そうしても悪影響はないため、これは可能です。
私の質問は、これString Pool
がどのように管理されているかです。いくつかの「k」文字列の頻度が非常に高く、一度作成されて再び使用されていない他の文字列オブジェクトがほとんどない場合。他の新しい文字列リテラルが使用されている可能性があります。
このような場合、String Pool は LRU キャッシュのように動作し、最新の使用済みリテラルへの参照を保持し、使用されていない古い文字列をプールから削除しますか?
String プールにはサイズがありますか、それともアプリケーションで制御できますか?
編集 :
通常、実装するカスタム オブジェクト プールにサイズを指定します。Sting Pool に LRU のような機能がないのはなぜでしょうか。これが特徴だったのかもしれません。大きな文字列の場合も問題はありませんでした。しかし、私はそれが実装された方法だと感じていますが、なぜそこにないのかを知りたかっただけです。つまり、何らかの正当な理由でそこにないことを意味します。この機能を使用すると、いくつかの悪影響が生じるでしょう. 誰かがそれらの悪影響に光を当てることができれば、それは良いことです.
java - String クラスの空のコンストラクター
そのため、紛らわしいコンストラクターに出くわしたとき、私は String クラスを読んでいました。コードは次のようになります
私は何を理解していません
"".value;
行う。これは何""
ですか?それは新しいString object
ですか?もしそうなら、どのコンストラクタで?