問題タブ [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.
java - 文字列連結時にJava文字列プールがどのように機能するか?
注意: 文字が等しいかどうかを比較しようとしているわけではありません。String.equals() メソッドの使い方を知っているからです。この質問は文字列参照に関するものです
クラス String とそのプロパティについて学び始めたとき、OCA 試験の勉強をしていました。文字列プールについて読んだり理解したりしたことによると、文字列が作成されると、Java はこのオブジェクトを呼び出すものに格納するということです。文字列プールと同じ値で新しい文字列が作成された場合、文字列プールの文字列を参照しますが、両方の文字列に同じ値が含まれていても新しい参照が作成されるため、 newキーワードを使用する場合を除きます。
例えば:
このコードが何を作成しているかを明確にするために、コードの 1 行目で を作成し、String a = "foo"
これをString プールに格納します。コードの 2 行目で、 を作成しString b
、参照を作成します。"foo"
これは、既にString プールに存在するためです。ただし、3 行目は、この文字列が既に存在するかどうかに関係なく、この文字列の新しい参照を作成します。何が起こっているかについての小さなグラフィックの例を次に示します。
問題は、次のコード行で発生します。文字列が連結によって作成された場合、Java は別のものを作成しますか、または単純な == コンパレーターは別の動作をしますか?
例 A:
例 B:
例 C:
コードの実行を見るには: ( http://ideone.com/fdk6KL )
何が起こっている ?
編集
例 B のエラーを修正:
b = 'hel' + 'lo'
問題についての説明を追加します。
String.equals()
これは比較の問題ではありません。問題の使用が文字列プールの参照にあることを知っているからです。
string - Stringpool にはいくつの String オブジェクトが作成されますか?
次の例を考えてみましょう:
文字列 s1 "こんにちは";
文字列 s2 = "世界";
文字列 s3 = s2 + s3;
上記の例では、Stringpool にいくつのオブジェクトが作成されていますか? 文字列 s3 は Stringpool に追加されますか、それともヒープ メモリ内の別のオブジェクトですか、それとも JVM はヒープ内に新しいオブジェクトを作成し、それを stringpool にも追加しますか? 前もって感謝します :)