Javaの不変文字列:知っておくべきことすべて

この記事では、Javaの不変文字列に関する詳細で包括的な知識を提供します。なぜそれが重要なのですか?

で不変の文字列を処理する はどのプログラミング言語でも非常に重要な側面です。この記事では、次のポイントについて説明します。



Javaの不変文字列の概要

文字列プールには、文字列が不変であるためにキャッシュされる文字列オブジェクトがあります。複数のクライアントがキャッシュされた文字列リテラルを共有します。 1人のクライアントの行動に伴うリスクは、他のすべてのクライアントに影響を及ぼします。



たとえば、クライアントが文字列値「Test」を「TEST」に変更すると、他のすべてのクライアントに変更された値が表示されます。文字列オブジェクトのキャッシュはパフォーマンスにとって重要であったため、ImmutableStringクラスはリスクを回避しました。また、 Stringクラスの不変条件が損なわれないように、Stringはfinalになりました。動作の拡張とオーバーライドによって行われる不変性、キャッシング、ハッシュコード計算の例。

ハッシュマップキー

HashMapキーは非常に人気があり、値オブジェクトをHashMapから取得できるようにするには、不変性が非常に重要です。 ハッシュ はHashMapの原則であり、正しく機能するには同じ値が必要です。 2つの異なるハッシュコードが挿入時に生成され、挿入後にコンテンツが変更された検索時に生成され、マップ内のマップ値オブジェクトが失われる可能性があります。



ハッシュテーブル-Javaの不変文字列
Javaの不変文字列クラスが最もよく聞かれます 。議論は、文字列とは何か、C ++の文字列との違いから始まります。次に、Javaの不変オブジェクト、不変オブジェクトの利点、それらの使用法、およびそれらを使用するシナリオについて説明します。

Javaでの不変の文字列の必要性

不変文字列クラスがJavaで作成される理由を説明するために、2つの理由が重要です。

1. 1つの文字列オブジェクト/リテラル​​を持つことは、まったく不可能です。



以下の例を参照してみましょう。

「テスト」は、多くの参照変数によって参照できます。それらのいずれかが他の値を変更すると、これも影響を受けます。その方法を見てみましょう。

文字列A = 'テスト'
文字列B = 'テスト'


文字列Aは、「Test」.toUpperCase()と呼ばれ、同じオブジェクトをに変更します。'テスト'したがって、Bも「TEST」になりますが、これは不要です。以下は、ヒープメモリと文字列リテラルプールで文字列がどのように作成されるかを示す図です。

2.文字列は、多くのJavaクラスのパラメータとして広く使用されていました。たとえば、ネットワーク接続を開くときは、ホスト名とポート番号を文字列として渡すことができます。データベース接続を開くときは、データベースのURLを文字列として渡すことができます。


不変の文字列は、深刻なセキュリティの脅威につながります。たとえば、誰かがアクセス権のあるファイルにアクセスし、ファイル名の名前を変更して他のファイルにアクセスすることができます。不変性の場合、これらの脅威について心配する必要はありません。

不変の文字列はスレッドを安全に共有することもできます。これはマルチスレッドプログラミングにとって重要です。不変の文字列インスタンスはJavaでスレッドセーフであるため、Javaでの同期の問題を回避するために、文字列操作を外部で同期する必要はありません。注意すべきもう1つの重要な点は、Substringによって引き起こされるメモリリークです。これはスレッド関連の問題ではありませんが、注意する必要があります。

c ++配列を昇順でソート

これで、この「Javaの不変文字列」の記事は終わりです。 C 一体 25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社であるEdurekaが世界中に広がっています。 EdurekaのJavaJ2EEおよびSOAトレーニングおよび認定コースは、Java開発者になりたい学生および専門家向けに設計されています。

質問がありますか?このブログのコメントセクションでそれについて言及してください。できるだけ早くご連絡いたします。