問題タブ [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 - 実行時に文字列を文字列プールに追加できますか?
メソッド呼び出しまたは から文字列オブジェクトを取得した場合StringBuilder.toString()
、この文字列は文字列プールに追加されますか?
String はクラスのロード中にのみプールに追加されますか?
java - メモリ内に作成される文字列の数は?
私がこのString
表現を持っているとしましょう
String プールは、「プール内の不変の文字列を保持することで、ランタイムがメモリを節約できるようにする」ことを知っています。String Pool
文字列プールにはいくつの文字列が作成されますか?
私の最初の推測は 5 - "Tom"
, "Brady"
, "Goat"
, "TomBrady"
,連結"TomBradyGoat"
操作の順序String
(左から右?) のためですか、それとも String プールに格納されるのは最終結果 "TomBradyGoat" だけですか?
java - println を使用したプール内の文字列カウント
私は OCA SE 7 試験の準備をしていますが、これらの質問のいくつかは本当に (!) トリッキーです。
使用している本の中に誤りがあったと思いますので、以下を確認したいと思います...
println
メソッドの実行後String
、プールにはいくつのオブジェクトがあるでしょうか?
私の理解では、 - 1行目は文字列をプールに追加しません - 2行目は「秋」と「夏」を作成し、それらをプールに追加しますしたがって、本の正解は2です.
しかし、私はまた...私は試験問題に偏執的であるはずなので...文字列「false」も作成されてプールに追加されると思います...したがって、3が正しい答えであると思います...それとも...「true」と「false」はデフォルトでJVMによってすでにプールに入れられていますか?...
誰か確認してくれませんか?
編集:いくつかの調査の後、本の「エラー」について話すのは公平ではないことがわかりました。一般的なヒント: 試験問題は通常、「次のコード」の観点から定式化されます。そのため、コード自体がローカルで行っていることの昔ながらの単純な計算に明らかに関心があります。したがって、スコープでは、println(boolean b)
実装またはコンパイラの最適化の検査は許可されません。けっこうだ :)
java - 文字列プールのメモリ割り当て
これは以下を出力します:
偽
真
なぜそうなのか、誰か説明してもらえますか?
java - コマンド ライン引数リファレンスを比較すると、false が返されますが、文字列の配列は true を返します
現在、私は文字列操作に取り組んでおり、デモを行っているときに、いくつかの異なる動作を見つけました。
以下は私のコードです。
}
上記のコードの出力は次のとおりです。コマンドライン引数を渡すコードを実行しています。
str1==str2:: true
str1==str3:: false
strArray[0]==strArray[1]:: true
str1==strArray[1]:: true
strArray1[0]==strArray1[1]:: true
str1==strArray1[1]:: true
args[0]==args[1]:: false
ここに 2 つのクエリがあります。
文字列 str1==str3 の参照を比較すると、str3 は新しい文字列を使用して作成され、文字列プールに存在しないため、false が返されます。
strArray[0]==strArray[1] は true を返し、strArray1[0]==strArray1[1] も true を返すのに、コマンド ライン引数args[0]==args[1] が falseを返すのはなぜですか??
ガイドしてください。
java - 文字列連結動作について
文字列の不変性を考えると、次のようなものだと理解しています
最初に文字列がインスタンス化されて文字列プールに入れられ、次にa+=i
新しい文字列が作成され (最初のループで0a
)、によって参照され、前の文字列がガベージ コレクションの対象となるため、非常に非効率的です。そして、これは9回起こります。
より良い方法は次を使用することStringBuilder
です:
new
しかし、キーワードを使用して文字列をインスタンス化すると、舞台裏で何が起こるの
でしょうか?
この場合a
、インターンされないことはわかっていますが (文字列プールにはありません)、それでも不変ですか? a+=i
このとき、指示は何をしますか?動作は最初の例と同じですか?
java - これは Java の文字列の不変性に対する妥協ですか?
String が Java で不変であることは誰もが知っています。文字列が作成されると、コンテンツは変更できません。
文字列は文字配列を使用して文字char[] value
列コンテンツを格納します。ここにJavaコードがあります-
フィールドへのアクセス権を取得しvalues[]
て変更したらどうなるでしょうか? このコードを参照してください -
このようにして、String Immutability Principleに反する文字列の内容を変更できると思います。
私は何かを逃していますか?