Java の " " を使用した String 初期化: 特殊なケース
Java の String クラスは、オブジェクト指向エンティティであるにもかかわらず、初期化できます二重引用符を使用します。この特殊性により、「オブジェクト指向プログラミングの範囲内でどのようにしてこれが可能になるのでしょうか?
Java の独自のアプローチ
Java ではすべてがそうでなければならないという概念に反して、次のような疑問が生じています。オブジェクトである場合、言語の設計者はパフォーマンス上の理由からプリミティブなデータ型を保持することを選択しました。コール スタックに常駐するプリミティブは、ヒープに割り当てられたオブジェクトと比較して、処理が高速になり、メモリ使用量が少なくなります。
これらの考慮事項のバランスを取るために、Java の String はハイブリッドとして作成されています。これはプリミティブのように動作しますが、オブジェクトのいくつかの特性も備えています。
文字列リテラル プール
文字列リテラルが二重引用符を使用して作成されると、直接割り当てられます。文字列リテラル プール。このプールには、メモリ使用量を最適化するために、一般的に使用される文字列の共有リポジトリが保存されます。同じ文字列リテラルへの後続の参照は、このプールから取得され、不要な重複が回避されます。
String Object
対照的に、String オブジェクトが "new" メソッドを使用してインスタンス化される場合は、演算子は、他のオブジェクトと同様にヒープ上に割り当てられます。これらの String オブジェクトは個別であり、独自のメモリ領域を占有します。
比較と保存
この動作を説明するには、次のコード スニペットを考えてみましょう。
String s1 = "Hello"; // String literal String s2 = "Hello"; // String literal String s3 = s1; // Same reference String s4 = new String("Hello"); // String object String s5 = new String("Hello"); // String object
図に示すように、s1、s2、および s3 はすべてプール内の同じ String リテラルを指しますが、s4 と s5 は別個の String オブジェクトです。
影響と注意事項
この独特の動作は、文字列操作に重要な影響を及ぼします。リテラルは不変で共有されるため、リテラルを変更すると、そのリテラルへのすべての参照が影響を受けます。ただし、String オブジェクトは変更可能であるため、他のオブジェクトに影響を与えることなく特定のインスタンスを変更できます。
これらの区別を考慮することは、Java プログラムで文字列を効率的かつ正確に処理するために重要です。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3