Javaでの文字列の使用について知っておくべきこと

Javaの学習を開始すると、その独自のプロパティのおかげで、Stringクラスが注目を集めます。

Javaで文字列を作成および操作するのは、他の言語よりも簡単です。これは、Stringクラスがさまざまな機能を提供するためです。

これらの機能に基づいて、好みやニーズに応じて文字列を生成および編集する方法がいくつかあります。同様に、多くはアプリケーションと文字列を使用する必要がある場所によって異なります。

Java文字列はどのように異なりますか?

以前にC言語を使用したことがある場合は、Cの文字列が文字(文字)の配列であることをご存知でしょう。一方、Java文字列は不変であり、Unicode文字が含まれています。

Javaの文字列を一意にする重要な機能の1つは、連結です。加算演算子「+」を使用して、2つ以上の文字列を結合するだけです。これは、 PointCircleなどの他のJavaオブジェクトでは実行できないことです。

また、前述のように、Java文字列は不変です。つまり、変更することはできません。たとえば、 toUpperCase()toLowerCase()のようなメソッドは、既存の文字列の内容を変更する代わりに、完全に新しい文字列を生成します。これで、コードはこの新しく生成された文字列を返します。

関連:これらの関数を使用してPHPでテキストを操作する方法

文字列が異なるもう1つの領域は、Cなどの言語で文字列を終了するためにヌル文字を使用する場合です。Javaでは、文字列は文字配列でサポートされるオブジェクトです。文字列の内容を文字配列が表す方法で読み取る場合は、 toCharArray()メソッドを使用してください。

Javaで文字列を比較することも、他のプログラミング言語よりも便利です。文字列を比較するための長いコードブロックを作成する代わりに、 equals()メソッドを使用して、任意のプログラムで使用されている2つ以上の文字列を比較できます。これは主に、Javaでは、 equalsメソッドがStringクラスによってオーバーライドされ、文字列の比較が簡単になるためです。

同様に、Javaで部分文字列内を検索するのも手間がかかりません。 lastIndexOf()indexOf()などの正規表現またはメソッドを使用しているときに、文字列のセグメントを検索して、一致が識別されたら値を返すことができます。正規表現を使用して、さまざまな文字列をトリミングおよび分割し、それらを個別に使用して、任意のプログラムで幅広い用途に使用することもできます。

文字列はどのようにメモリに保存されますか?

Javaの文字列が他とは異なり、有益である理由がわかったところで、Stringクラスについて見ていきましょう。 Javaでのメモリ管理について知っている場合は、ヒープとスタックという2つの主要なエンティティを処理している必要があります。

スタックは、Javaプログラムによって呼び出された後にプロセスと操作を実行するために使用されますが、ヒープは、コードを効果的に実行および実行するために必要なコンテンツを格納します。では、文字列の場合、メモリ管理はどのように関連しているのでしょうか。

これは、JavaのStringクラスと文字列リテラルの扱いが異なるためです。これは、文字列リテラルに、文字列定数プールと呼ばれるヒープメモリ内の一意のストレージスペースが割り当てられていることを示します。したがって、文字列リテラルを使用してJavaで文字列オブジェクトを作成する場合は常に、文字列定数プールにそれらが格納されます。

逆に、 newキーワードを使用して文字列オブジェクトを作成すると、Javaはそれらを他のオブジェクトと同じように扱い、ヒープに送信して保存します。

文字列リテラルの例

文字列オブジェクトについて十分に理解したところで、文字列リテラルの例を見てみましょう。

 
public class muostrings {
public static void main(String args[])
{
String himuo = "Hello World from MUO";
System. out .println (himuo);
}
}

ここで、文字列リテラルは、「Hello WorldfromMUO」という内容のStringオブジェクトを作成しました。 Javaはこのオブジェクトを文字列定数プールに送信します。

新しいキーワードの使用

newキーワードを使用して、Stringオブジェクトを生成することもできます。

「HelloWorldfromMUO」という内容の文字列「himuo」の文字列オブジェクトは、文字列リテラルによって生成され、文字列定数プールに送信されます。同様に、文字列オブジェクトは、次のようにnewキーワードを使用して作成することもできます。

 
public class muostringsobj {
public static void main(String args[]) {
char [] strArr = { 'M', 'O', 'U'};
String jStr = new String(strArr);
System. out .println( jStr );
}
}

上記の例では、 newキーワードを使用して文字列オブジェクトを作成しています。前に説明したように、それらはヒープに送信され、プログラムによって実行されるのを待っている他の変数やオブジェクトとともに格納されます。

ここまでで、文字列定数プールに興味があるはずです。当然のことながらそうです。文字列オブジェクトの内容に基づいて、プールスペースをオブジェクトに割り当てます。文字列定数プールはオブジェクトを受信した後、それらをチェックして、2つのオブジェクトにまったく同じコンテンツが含まれているかどうかを確認します。

2つの文字列オブジェクトに同じコンテンツを保存できますか?

文字列リテラルを使用して新しいオブジェクトを作成すると、Java仮想マシン(JVM)がオブジェクトの内容を確認し、それがプールにすでに存在するかどうかを評価します。オブジェクトにプールにすでに存在するコンテンツが含まれている場合、新しいオブジェクトを作成せずにオブジェクトの参照が返されます。新しいオブジェクトを作成する必要がある場合は、コンテンツが明確で一意であることを確認する必要があります。

ただし、 newキーワードを使用して新しい文字列を作成すると、処理が異なります。 newキーワードを使用して新しい文字列を作成すると、既存の文字列と同じ内容が含まれているかどうかに関係なく、新しい文字列が生成されます。

これは、ヒープメモリに格納されている2つの既存の文字列オブジェクトが同じ内容を伴うことが許可されていることを示しています。これは、文字列定数プールに格納されている文字列オブジェクトとは異なります。 「==」演算子を使用してこれを証明することもできます。同じ物理アドレスを持つ2つのオブジェクトが比較される場合、trueを返します。

 
public class comparingStrngs {
public static void main(String[] args)
{
String firstLiteral = "muo1";
String secondLiteral = "muo1";
System. out .println(firstLiteral == secondLiteral);
String firstKeyword = new String("muo2");
String secondKeyword = new String("muo2");
System. out .println(firstKeyword == secondKeyword);
}
}

これで、Javaの文字列を簡単に理解できます

この記事では、Javaでの文字列の違い、Javaでの文字列の使用方法、Javaでの文字列のメモリ管理、および文字列の動作に関するその他の重要な詳細について学習しました。理解度をテストするために、2つの文字列を連結するJavaプログラムを作成してみませんか?