問題タブ [string-interning]
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 - これらの文字列の str == str.intern() の結果が異なるのはなぜですか?
結果:
最初のものは を出力true
し、2 番目は を出力しfalse
ます。結果が異なるのはなぜですか?
ruby - 凍結されたと宣言された文字列が割り当てられるのはいつですか (もしあったとしても?)
Ruby 2.2 では、次のように新しい String オブジェクトを割り当てますか、それともインターンされたものを使用しますか? これらのコマンドは、指定された順序で実行されると想定してください。
あなたの答えの証拠を提供できれば、それも素晴らしいでしょう:)。
java - 文字列参照比較 == とインターンについて混乱する
文字列定数で文字列のインターンメソッドを使用する必要がある場合にこれを読みましたが、文字列 == ではまだあまり明確ではありません intern() と比較してください。いくつかの例があります。誰かがこれをよりよく理解するのを手伝ってくれますか?
java - プールとヒープでの文字列の作成
String にはほとんど疑問がありません。
インターネット上のさまざまな記事からの理解に基づいてこれを書いているため、特定のステートメントが間違っている可能性がありますが、ご容赦ください.
String str1 = new String ("newStr1");を実行する と、. これにより、2 つの文字列オブジェクトが作成されます。1 つは通常のヒープに、もう 1 つは文字列プールにあります。なぜ 2 つのオブジェクトとその使用法? プールに1つだけではないのはなぜですか?
オブジェクトをString str2 = new String("newStr2").intern();として作成するとします。. これは、同様の (意味的に等しい) オブジェクトがプールにあるかどうかをチェックし、そのオブジェクトへの参照を提供します。ない場合は、ヒープではなくプールに作成しますか? もしそうなら、メモリを節約するためにほとんどの場合インターンを使用する必要がありますか? ただし、パフォーマンスに少し影響します。したがって、基本的にはString str2 = "newStr2"; です。(interning は文字列リテラルに対して暗黙的です)
Java-6 の後、文字列プールは perm gen 領域からヒープ領域に移動しましたか? つまり、基本的にヒープとして 1 つの領域しか持たないのですか、それとも文字列プールはヒープ内の別のセクションとして存在するのでしょうか? 別のセクションでない場合でも、2 つのオブジェクトが作成されますか?
c# - インターンされた文字列は .NET のガベージ コレクションから除外されますか?
Gen2 コレクションの実行にかかる時間を短縮しようとしています。私のアプリは多数の文字列オブジェクトを作成して保持しており、そのオブジェクトは存続しています。
スキャンされるオブジェクトの数を減らすと、GC 時間が短縮されます。インターンプールがガベージコレクションから除外されるかどうか疑問に思っていました。とにかくそこに収集するものは何もありません。もしそうなら、これらすべての文字列をインターンして、GC を高速化できます。
c# - serializer.Deserialize の文字列インターン()
現在、json.net を使用して、中サイズのオブジェクト コレクションである文字列を逆シリアル化しています。合計〜7000アイテム。
各項目には 4 つの同一の文字列の繰り返しグループがあり、メモリ プロファイリングでは、ネストなどに応じて約 40,000 の参照が作成されます。
シリアライザーが同一の文字列ごとに同じ参照を使用するようにする方法はありますか?
JSON の例:
例を追加しました。ご覧のとおり、groupName の値はほとんどすべてのオブジェクトで繰り返されます。関連するコードのみが変更されます。それほど大きな懸念事項ではありませんが、データセットが大きくなるにつれて、割り当てをあまり増やしたくありません。
また、「コード」が繰り返されるように見えるかもしれませんが、それは人それぞれです。基本的に、同じオブジェクトの複数の識別子。
string - cpythonの文字列インターンのルールは何ですか?
Python 3.5 では、いつインターンされた文字列を取得するか、またはいつコピーを取得するかを予測できますか? この問題に関するいくつかのスタック オーバーフローの回答を読んだ後、これが最も役立つが、まだ包括的ではないことがわかりました。Python docsを見たよりも、インターンはデフォルトでは保証されていません
通常、Python プログラムで使用される名前は自動的にインターンされ、モジュール、クラス、またはインスタンスの属性を保持するために使用される辞書にはインターンされたキーがあります。
したがって、私の質問は、内部intern()
条件、つまり意思決定 (文字列リテラルをインターンするかどうか) に関するものです。なぜ同じコード片があるシステムでは機能し、別のシステムでは機能しないのか、また、言及されたトピックに関する回答の作成者が意味するルールは何ですか?言うとき
これがいつ起こるかについてのルールは非常に複雑です
java - 文字列 intern() の動作
String クラスの intern メソッドのjavaDocsから:
intern メソッドが呼び出されたときに、equals(Object) メソッドによって決定されたこの String オブジェクトと等しい文字列がプールにすでに含まれている場合、プールからの文字列が返されます。それ以外の場合は、この String オブジェクトがプールに追加され、この String オブジェクトへの参照が返されます。
次の使用例を検討してください。
以下が偽であるのに対し、なぜseven == seven.intern()
が真であるかを誰かが説明できますか:
System.out.println(fifth == fifth.intern());
System.out.println(sixth == sixth.intern());
System.out.println(eight == eight.intern());
java - String.intern() メソッドが 2 つの異なる結果を返すのはなぜですか?
私は次のようなコードを持っています:
なぜstr1.intern() == str1
とstr3.intern() == str3
が正しいかは理解できますが、 はわかりませんstr2.intern() == str2
。なぜこれが間違っているのですか?
私のJavaバージョンは: 1.8.0_73