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 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