ホームページ > Java > &#&チュートリアル > `new String('silly')` と同じように `new CaseInsensitiveString('Polish')` を使用できないのはなぜですか?

`new String('silly')` と同じように `new CaseInsensitiveString('Polish')` を使用できないのはなぜですか?

DDD
リリース: 2024-12-01 01:27:11
オリジナル
739 人が閲覧しました

Why Can't I Use `new CaseInsensitiveString(

Java の文字列作成の明確化: "String s = new String("silly")" の再考

Java における String オブジェクトの作成はよく質問されるトピックです。そのような質問の 1 つは、リテラルを割り当てるときの String と他のクラスの使用法の違いに関するものです。

「CaseInsensitiveString cis = new CaseInsensitiveString("Polish")」はなぜ正しいのですか?

ステートメント「CaseInsensitiveString cis = new CaseInsensitiveString("Polish")」は確かにString は Java の一意のクラスであるため、正解です。この動作は、CaseInsensitiveString などの他のクラスには適用されません。

String の特殊な動作を理解する:

他のクラスとは異なり、String には、この独自の動作を可能にする特定の固有の特性があります。 :

  • 文字列リテラルは自動的にInterned: 文字列リテラル (例: "Polish") は、JVM の文字列プールに自動的にインターンされます。これは、使用回数に関係なく、一意のリテラルごとに String オブジェクトが 1 つだけ作成されることを意味します。
  • 文字列には「コピー コンストラクター」がありません: 文字列には、 String を引数として受け入れる標準コンストラクター。代わりに、リテラルから直接初期化できる独自の機能があります。

CaseInsensitiveString を String のように動作させる方法:

CaseInsensitiveString を String のように動作させるには、次のようにします。ただし、そのコンストラクターをオーバーライドし、渡された文字列リテラルを手動で文字列プールにインターンする必要があります。これには、JVM の内部文字列プールへのアクセスが必要であり、慎重に行わないとパフォーマンスの問題が発生する可能性があります。

結論:

要約すると、String は、リテラルを使用した簡略化された初期化を可能にする Java。 CaseInsensitiveString などの他のクラスにはこの動作がなく、適切なコンストラクターを使用して明示的に構築する必要があります。

以上が`new String('silly')` と同じように `new CaseInsensitiveString('Polish')` を使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート