9

Javaのstrcpyとは何ですか?

String s1, s2;

s1 = new String("hello");
s2 = s1; // This only copies s1 to s2.
4

5 に答える 5

16

この文:

s2 = s1;

の値を にコピーしs1ますs2。その値は単なる参照であるため、現在s1s2同じオブジェクトを参照しています。したがって、これが変更可能な型 ( StringBuilder、または などArrayList) である場合は、心配する必要があります。

ただし、String不変です。オブジェクトを変更してそのテキスト データを変更することはできないため、参照をコピーするだけで十分です。の値を変更s2して別の文字列を参照する (またはnull参照にする) と、 の値は変更されませんs1

String s1 = "hello";
String s2 = s1;
s1 = "Something else";
System.out.println(s2); // Prints hello

本当に新しいオブジェクトを作成したい場合Stringは、既に (不必要に) for を使用しているコンストラクターを使用できますs1

s2 = new String(s1);

ただし、それが良い考えであることはめったにありません。

于 2012-08-29T11:52:40.987 に答える
6

文字列は不変であるため、コピーする必要はありません。(稀な場合を除く)

例えば

s1 = new String("hello");

基本的に同じです

s1 = "hello";

s2 = s1;

基本的に同じです

s2 = "hello";
于 2012-08-29T11:53:19.463 に答える
0
String s1, s2;

s1 = new String("hello");
s2 = s1; // This only copies s1 to s2. Am I right?

s1="adsfsdaf";

System.out.println(s2);
System.out.println(s1);

あなたは正しいですs1とs2は同じ文字列ではなく文字列を出力します...しかし、オブジェクトに対してこれを行う間、あるオブジェクトで行われた変更は別のオブジェクトに影響します...オブジェクトのクローンが必要です..文字列に問題はありません

于 2012-08-29T11:56:16.900 に答える
0

Javaの文字列オブジェクトは不変であるため、文字列コンストラクターは非常に簡単に仕事をします

String st="hello";
String st1=new String(st);

OUTPUT は st1 is hello になります

于 2012-08-29T11:58:16.730 に答える
0

Nos2は、新しく作成された文字列オブジェクトを とともに参照しs1ます。

于 2012-08-29T11:52:59.777 に答える