ホームページ  >  記事  >  Java  >  JavaのStringクラスの使い方

JavaのStringクラスの使い方

WBOY
WBOY転載
2023-04-19 13:19:031778ブラウズ

JavaのStringクラスの使い方

1. 文字列について理解する

1. JDK の文字列

まず、JDK の String クラスのソース コードを見てみましょう。これは、String クラスを継承できず、String のサブクラスが存在しないことを意味します。このようにして、JDK を使用するすべての人が同じ String を使用することになります。 String の継承を許可すると、誰もが String を拡張でき、全員が使用する String のバージョンが異なるため、2 人の異なる人が同じメソッドを使用して異なる結果を示し、コードの開発が不可能になります。 # 継承とメソッドのオーバーライドは柔軟性をもたらしますが、サブクラスの動作に一貫性がないという多くの問題ももたらします

JavaのStringクラスの使い方

2. 文字列を作成する 4 つの方法

メソッド 1: 直接代入 (一般的に使用されます)

String str = " hello word "

方法 2: 構築メソッドを通じてオブジェクトを生成する

String str1 = new String(" hello word ");

Method 3: 文字配列を使用してオブジェクトを生成します。

char[] data = new char[]{'a', 'b','c'};

方法 4: String valueOf(any の静的メソッドを使用してオブジェクトを生成します)データ型) = > 文字列に変換 (一般的に使用されます)

String str2 = String.valueOf(10);

JavaのStringクラスの使い方

3. 文字列リテラル

リテラル:直接書き込まれた値はリテラルと呼ばれます

10 – > int リテラル
10.1 --> double リテラル
true --> boolean リテラル
" abc " – > String リテラル
文字列リテラルは実際には文字列オブジェクトです
String str = “hello word”;
String str2 = str;
現時点では、これは両方とも文字列のオブジェクトです。文字列です。分かりやすいように絵を描いてみましょう。このとき、分かりやすいように一時的にヒープ上に格納されていると考えますが、実際にはメソッド領域に格納されます。

JavaのStringクラスの使い方 この時点で str2 = "Hello" が設定されている場合、" " で囲まれた Hello も文字列オブジェクトであり、新しいスペースが開かれていることを示すため、現時点では str の出力には影響しません。このとき、str2 はヒープを保存し、str2 は新しいオブジェクトのアドレス空間を保存し、str

JavaのStringクラスの使い方

4 には影響しません。文字列比較は等しい

Whenすべての参照データ型が等しいかどうかを比較するには、Equals メソッドの比較を使用します。JDK の共通クラスは、equals メソッドをオーバーライドしています。これを直接使用できます。
参照データ型は、== を使用してアドレスを比較します。
次の図は、2 つのデータ型を示しています。同じアドレス空間を指す参照。これは文字列の定数プールに関連しています。
JavaのStringクラスの使い方#次の図では、2 つのオブジェクトと 2 つのアドレス空間が生成されます。== を使用すると、false

## が返されます。 # 等号の比較サイズは大文字と小文字を区別して比較しますJavaのStringクラスの使い方

equalsIgnoreCase メソッドは大文字と小文字を区別しない比較ですJavaのStringクラスの使い方

JavaのStringクラスの使い方 2. 文字列定数プール

1. 文字列定数プールとは


## 直接代入方式を使用して文字列定数プールを生成する場合文字列オブジェクトの場合、JVM は文字列定数プールを維持します。オブジェクトがヒープに存在しない場合は、文字列オブジェクトを生成して文字列定数プールに追加します。文字列オブジェクトの生成に直接代入方法を使用し続ける場合は、 , JVM は、この参照が指すコンテンツが定数プールに既に存在することを検出します。この時点では、新しい文字列オブジェクトを作成する必要はありませんが、既存のオブジェクトを直接再利用します。これが、上の図の 3 つの参照が存在する理由です。 JavaのStringクラスの使い方

オブジェクトが初めて生成されるときは、定数プールに何もないため、文字列オブジェクトが生成され、定数プールに格納されます。 2 回目と 3 回目に生成されると、JVM は定数を見つけます。同じコンテンツがプールにすでに存在する場合、新しいオブジェクトは生成されず、str1JavaのStringクラスの使い方
## と同じアドレス空間を直接指します。

JavaのStringクラスの使い方
プログラムは右から左に実行されますが、このとき、コードの 1 行目の右側は文字列定数であり、これも文字列オブジェクトであるため、最初に定数プールに ヒープ内にスペースを作成し、次に新しい文字列オブジェクトを作成して保存します。プログラムは左側に実行され、新しいキーワードに遭遇します。このとき、新しいオブジェクトが作成され、ヒープに保存されます。次に、str1 はヒープ内のオブジェクトを指し、次に 2 行目を指します。コードを 3 行実行すると、そのオブジェクトが定数プールにすでに存在していることがわかります。新たに作成する必要はありません。new キーワードが見つかった場合、新しいオブジェクトが作成されます。メモリ ダイアグラムは次のとおりです:
JavaのStringクラスの使い方

2. 手動プール エントリ メソッド

String クラスによって提供されるインターン メソッド。これはローカル メソッドです。メソッド:
JavaのStringクラスの使い方
インターン メソッドを呼び出すと、現在の文字列参照が指すオブジェクトが文字列定数プールに保存されます。2 つのタイプがあります。 状況:
1. オブジェクトがすでに現在の定数プールに存在しない場合、新しいオブジェクトは生成されず、定数プール内の String オブジェクトが返されます。
2. オブジェクトが現在の定数プールに存在しない場合、オブジェクトはプールに置かれ、アドレスが返されます。プールに入れた後は返却されます。

1. 次のコード行の出力を見てください
JavaのStringクラスの使い方
インターン メソッドには戻り値があるため、str1 は現時点ではインターン メソッドのみを呼び出し、呼び出しは行いません。戻り値を受け取ります。したがって、str1 は依然としてヒープ内のオブジェクトを指し、str2 は定数プール内のオブジェクトを指しているため、false が返されます。
JavaのStringクラスの使い方
インターン呼び出しの戻り値である限り、メソッドを受信すると true が返されます;
JavaのStringクラスの使い方
この時点で、str1 が指すオブジェクトは手動でプールに追加されます。オブジェクトはすでにプールに存在します。str1 にオブジェクトを直接指すようにします。 .
JavaのStringクラスの使い方
2. 次のコード行を見てください。出力
JavaのStringクラスの使い方
手動でプールに入ると、プールには何もないため、直接プールに移動されます。定数プール
JavaのStringクラスの使い方


3. 文字列の不変性

1. 不変である理由

注: いわゆる不変文字列
JavaのStringクラスの使い方# ここでの不変とは、「hello」、「world」、「helloworld」、「!!」を指します。 !"、および結合された "helloworld!!!" これらのすでに作成された文字列オブジェクトは、これらのオブジェクトが宣言されると、その内容を後で変更することはできませんが、参照は変更できます。ある瞬間には hello を指し、別の瞬間にはそれが指しますhelloworld へ、そして今度は hello world を指しています! ! ! 、これはすべて可能です

JavaのStringクラスの使い方 文字列は単なる文字配列です -> char[]、文字列は実際には文字配列に格納されます。文字列の内容を変更できないのはなぜですか?文字列のソースコードを見て調べてみましょう。

JavaのStringクラスの使い方 String 内の文字配列がカプセル化されていることがわかります。この文字配列は String クラスの外部からアクセスすることはできず、ましてや文字列の内容を変更することはできません
String str = " hello " ;

JavaのStringクラスの使い方

2. 文字列の内容を変更する方法

1. 実行時のリフレクションを通じて値配列のカプセル化を破棄します

2. 代わりに StringBuilder または StringBuffer を使用しますClass - - は型ではなくなりました
a.StringBuilder: スレッド セーフ、強力なパフォーマンス
b.StringBuffer: スレッド セーフ、低パフォーマンス
さらに、2 つのクラスの使用法はまったく同じです。

文字列を頻繁に結合する必要がある場合は、StringBuilder クラスの append メソッドを使用してください。ここではオブジェクトが 1 つだけ生成され、しばらくの間 hello になり、しばらくの間 hello world になります。


JavaのStringクラスの使い方

3. StringBuilder クラスの具体的な使用方法

StringBuilder クラスと String は 2 つの独立したクラスです。StringBuilder クラスは、文字列の結合の問題を解決するために作成されました。 StringBuilder クラスと String クラス:


1.StringBuilder は String クラスになり、String メソッドを呼び出します


JavaのStringクラスの使い方2.String クラスは StringBuilder クラスに変換されます。StringBuilder のコンストラクターを使用するか、追加します。 method


JavaのStringクラスの使い方
その他の一般的に使用されるメソッド: JavaのStringクラスの使い方 a. sb;


によって提供される文字列反転操作 reverse()

b. 指定された範囲のデータを削除し、delete (int start, int end); 最初から最後まですべてを削除し、左側が閉じ、右側が開きます。 #c .Insert 操作、insert(int start、さまざまなデータ型): 開始インデックス位置から挿入します。挿入の開始インデックスは start
JavaのStringクラスの使い方

です。

以上がJavaのStringクラスの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。