JavaのStringクラスの使い方
1. 文字列について理解する
1. JDK の文字列
まず、JDK の String クラスのソース コードを見てみましょう。これは、String クラスを継承できず、String のサブクラスが存在しないことを意味します。このようにして、JDK を使用するすべての人が同じ String を使用することになります。 String の継承を許可すると、誰もが String を拡張でき、全員が使用する String のバージョンが異なるため、2 人の異なる人が同じメソッドを使用して異なる結果を示し、コードの開発が不可能になります。 # 継承とメソッドのオーバーライドは柔軟性をもたらしますが、サブクラスの動作に一貫性がないという多くの問題ももたらします
String str = " hello word "
String str1 = new String(" hello word ");
char[] data = new char[]{'a', 'b','c'};
String str2 = String.valueOf(10);
10 – > int リテラル
10.1 --> double リテラル
true --> boolean リテラル
" abc " – > String リテラル
文字列リテラルは実際には文字列オブジェクトです
String str = “hello word”;
String str2 = str;
現時点では、これは両方とも文字列のオブジェクトです。文字列です。分かりやすいように絵を描いてみましょう。このとき、分かりやすいように一時的にヒープ上に格納されていると考えますが、実際にはメソッド領域に格納されます。 この時点で str2 = "Hello" が設定されている場合、" " で囲まれた Hello も文字列オブジェクトであり、新しいスペースが開かれていることを示すため、現時点では str の出力には影響しません。このとき、str2 はヒープを保存し、str2 は新しいオブジェクトのアドレス空間を保存し、str
4 には影響しません。文字列比較は等しい
Whenすべての参照データ型が等しいかどうかを比較するには、Equals メソッドの比較を使用します。JDK の共通クラスは、equals メソッドをオーバーライドしています。これを直接使用できます。
参照データ型は、== を使用してアドレスを比較します。
次の図は、2 つのデータ型を示しています。同じアドレス空間を指す参照。これは文字列の定数プールに関連しています。#次の図では、2 つのオブジェクトと 2 つのアドレス空間が生成されます。== を使用すると、false
## が返されます。 # 等号の比較サイズは大文字と小文字を区別して比較します
equalsIgnoreCase メソッドは大文字と小文字を区別しない比較です 2. 文字列定数プール
1. 文字列定数プールとは
## 直接代入方式を使用して文字列定数プールを生成する場合文字列オブジェクトの場合、JVM は文字列定数プールを維持します。オブジェクトがヒープに存在しない場合は、文字列オブジェクトを生成して文字列定数プールに追加します。文字列オブジェクトの生成に直接代入方法を使用し続ける場合は、 , JVM は、この参照が指すコンテンツが定数プールに既に存在することを検出します。この時点では、新しい文字列オブジェクトを作成する必要はありませんが、既存のオブジェクトを直接再利用します。これが、上の図の 3 つの参照が存在する理由です。
オブジェクトが初めて生成されるときは、定数プールに何もないため、文字列オブジェクトが生成され、定数プールに格納されます。 2 回目と 3 回目に生成されると、JVM は定数を見つけます。同じコンテンツがプールにすでに存在する場合、新しいオブジェクトは生成されず、str1
## と同じアドレス空間を直接指します。
プログラムは右から左に実行されますが、このとき、コードの 1 行目の右側は文字列定数であり、これも文字列オブジェクトであるため、最初に定数プールに ヒープ内にスペースを作成し、次に新しい文字列オブジェクトを作成して保存します。プログラムは左側に実行され、新しいキーワードに遭遇します。このとき、新しいオブジェクトが作成され、ヒープに保存されます。次に、str1 はヒープ内のオブジェクトを指し、次に 2 行目を指します。コードを 3 行実行すると、そのオブジェクトが定数プールにすでに存在していることがわかります。新たに作成する必要はありません。new キーワードが見つかった場合、新しいオブジェクトが作成されます。メモリ ダイアグラムは次のとおりです:
2. 手動プール エントリ メソッド
String クラスによって提供されるインターン メソッド。これはローカル メソッドです。メソッド:
インターン メソッドを呼び出すと、現在の文字列参照が指すオブジェクトが文字列定数プールに保存されます。2 つのタイプがあります。 状況:
1. オブジェクトがすでに現在の定数プールに存在しない場合、新しいオブジェクトは生成されず、定数プール内の String オブジェクトが返されます。
2. オブジェクトが現在の定数プールに存在しない場合、オブジェクトはプールに置かれ、アドレスが返されます。プールに入れた後は返却されます。
1. 次のコード行の出力を見てください
インターン メソッドには戻り値があるため、str1 は現時点ではインターン メソッドのみを呼び出し、呼び出しは行いません。戻り値を受け取ります。したがって、str1 は依然としてヒープ内のオブジェクトを指し、str2 は定数プール内のオブジェクトを指しているため、false が返されます。
インターン呼び出しの戻り値である限り、メソッドを受信すると true が返されます;
この時点で、str1 が指すオブジェクトは手動でプールに追加されます。オブジェクトはすでにプールに存在します。str1 にオブジェクトを直接指すようにします。 .
2. 次のコード行を見てください。出力
手動でプールに入ると、プールには何もないため、直接プールに移動されます。定数プール
3. 文字列の不変性
1. 不変である理由
注: いわゆる不変文字列# ここでの不変とは、「hello」、「world」、「helloworld」、「!!」を指します。 !"、および結合された "helloworld!!!" これらのすでに作成された文字列オブジェクトは、これらのオブジェクトが宣言されると、その内容を後で変更することはできませんが、参照は変更できます。ある瞬間には hello を指し、別の瞬間にはそれが指しますhelloworld へ、そして今度は hello world を指しています! ! ! 、これはすべて可能です
文字列は単なる文字配列です -> char[]、文字列は実際には文字配列に格納されます。文字列の内容を変更できないのはなぜですか?文字列のソースコードを見て調べてみましょう。
String 内の文字配列がカプセル化されていることがわかります。この文字配列は String クラスの外部からアクセスすることはできず、ましてや文字列の内容を変更することはできません
String str = " hello " ;
2. 代わりに StringBuilder または StringBuffer を使用しますClass - - は型ではなくなりました
a.StringBuilder: スレッド セーフ、強力なパフォーマンス
b.StringBuffer: スレッド セーフ、低パフォーマンス
さらに、2 つのクラスの使用法はまったく同じです。
1.StringBuilder は String クラスになり、String メソッドを呼び出します
2.String クラスは StringBuilder クラスに変換されます。StringBuilder のコンストラクターを使用するか、追加します。 method
その他の一般的に使用されるメソッド: a. sb;
によって提供される文字列反転操作 reverse()
b. 指定された範囲のデータを削除し、delete (int start, int end); 最初から最後まですべてを削除し、左側が閉じ、右側が開きます。 #c .Insert 操作、insert(int start、さまざまなデータ型): 開始インデックス位置から挿入します。挿入の開始インデックスは start
以上がJavaのStringクラスの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。
