Java で文字列をコピーする

Rashmi Patidar 2023年10月12日
Java で文字列をコピーする

Java 言語では、文字列は文字のシーケンスを格納するデータ型です。文字列は、compare()replace()substring() などのメソッドを提供するラッパークラスです。オブジェクトがインスタンス化されるたびに、オブジェクトはヒープメモリに保存されます。

Java で文字列をコピーする

以下は、Java で文字列をコピーする方法を示すコードブロックです。

public class StringCopy {
  public static void main(String[] args) {
    String first = "First String";
    System.out.println("First initially = " + first);
    String second = first;
    System.out.println("String copy in second = " + second);
    first = "Updated string";
    System.out.println("First after update = " + first);

    String newCopy = String.copyValueOf(first.toCharArray());
    System.out.println("Copy using copyValueOf() = " + newCopy);

    String copyString = new String(first);
    System.out.println("Copy using new = " + copyString);
  }
}

上記のプログラムでは、文字列は操作の最初の部分で初期化されます。String first = "First String"という表現は、メモリ内に First String のインスタンスを作成します。さらに、この新しい文字列アドレスが最初に変数に割り当てられます。この値は、println() メソッドを使用して出力されます。

ここで、String second = first 行は、最初の参照を 2 番目のインスタンスに格納し、コピー値を別の行に出力します。その結果、second 変数には first 参照が含まれます。次に、first = "Updated string"は、最初の文字列の参照を既存の値からヒープメモリ内の別の文字列に変更します。

Java 文字列は本質的に不変です。これは、文字列が作成されると、ヒープメモリに存在することを意味します。また、最初の変数に別の値が割り当てられても、その値は上書きされません。代わりに、変数はヒープメモリから別の文字列を参照するようになりました。ガベージコレクタが動作しない限り、ヒープメモリ内の参照はヒープに格納されます。この関数は、変数によって参照されていない場合、定数メモリプールから変数をフラッシュします。

文字列をコピーする別の方法は、copyValueOf メソッドを使用します。これは、文字配列を入力として受け取る静的ファクトリメソッドです。インスタンスは、最初に toCharArray 関数を使用して文字配列に変換されます。最終的な文字列インスタンスは、newCopy 変数によって参照され、別の行に出力されます。

文字列をコピーする 3 番目の方法は、new キーワードを使用することです。このメソッドは、メモリ内に 2つのインスタンスを作成します。最初のインスタンスは値を保持し、もう 1つの copyString 変数は first 変数の参照を格納します。

以下は、上記のプログラムの結果であるコードブロックです。

出力:

First initially = First String
String copy in second = First String
First after update = Updated string
Copy using copyValueOf() = Updated string
Copy using new = Updated string
著者: Rashmi Patidar
Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn

関連記事 - Java String