1

String オブジェクトが不変であるという事実に同意します。つまり、変更できないということです。以下の場合のように

String str = "Hi";
String str1 = str.concat("Nilesh");

ここで、長さ引数が 0 の場合は str オブジェクトが返されます。または、新しい String オブジェクトが作成され、その参照が返されます。もしそうなら

String str = "Hi";
str="Hello";

どのように変化していますか?不変はどこに現れますか?例をください。

4

7 に答える 7

5

不変であるのは文字列自体であり、文字列を指す参照ではありません。2番目のコード:

String str = "hi";
str = "hello";

関連する2つの文字列オブジェクトがあります:"hi""hello"

strは、最初に最初のものを指し、次に割り当てに続いて2番目のものを指す参照です。ただし、Stringオブジェクト"hi"はそのコードでは変更されません。

于 2012-09-20T12:38:11.547 に答える
3

不変性と参照の変更を混同しています。

このコード:

String str = "Hi"; // str now refers to the String "Hi"
str = "Hello";  // str now refers to the String "Hello"

String参照するオブジェクトを変更するだけstrです。オブジェクトへの参照を保持するstr変数です。またはオブジェクトStringを変更することは何も起こりませんでした。"Hi""Hello"


Stringが変更可能である場合、setValue(String s)その状態を変更するために呼び出すことができるようなメソッドがあるため、次のことができる可能性があります。

String str = "Hi";
str.setValue("Hello"); // if String were mutable
于 2012-09-20T12:38:02.327 に答える
1

"Hello"のオブジェクトが完全に異なるStringため、参照できなくなります"Hi"

不変性は参照ではなく、オブジェクトの状態です。状態が変更されると、新しいオブジェクトが作成されます。

http://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html

オブジェクトは、構築後に状態を変更できない場合、不変であると見なされます。

于 2012-09-20T12:37:49.780 に答える
1

str変数です。「変数」という用語は、変数に一度に1つずつさまざまな文字列を割り当てることができることを意味します。各文字列は引き続き不変です。

于 2012-09-20T12:38:16.483 に答える
1

他の人が言った場合"Hello"は別Stringです。Stringを使っていただくと新しいベストであることがお分かりいただけると思いますSystem.identityHashCode()。試してみてください:

String str = "Hi";
System.out.println("try 1: "+System.identityHashCode(str));
str="Hello";
System.out.println("try 2: "+System.identityHashCode(str));

System.identityHashCode通常、参照自体を返します(ただし、その事実に頼ることはできません)。

于 2012-09-20T12:41:18.033 に答える
1
String str = "Hi";

str="Hello";

文字列は不変であるため、文字列オブジェクトを変更することはできません。

ここで, 2 つのオブジェクトが作成されます. ハッシュコードで確認できます.

文字列 str = "こんにちは";

System.out.println("Str(Hi)-hashcode: "+str.hashCode());

str="Hello";

System.out.println("Str(Hello)-hashcode: "+str.hashCode());

どちらの場合もHashCode の値は異なります。

最初のケース -> Str(Hi) - ハッシュコード: 2337

2 番目のケース -> Str(Hello) - ハッシュコード: 69609650

于 2015-04-17T06:29:24.767 に答える
0

ケース1:

String str = "Hi";
String str1 = str.concat("Nilesh");

合計3つの文字列オブジェクトが作成されます

ケース2:

String str = "Hi";
str="Hello";

この場合、2つの文字列オブジェクトが作成されます。1行目が実行されると、strは「Hi」を参照します。2行目が実行されると、strは「Hello」を参照し、「Hi」を分離します。strはline2の後の「Hello」を指します

于 2012-09-20T12:39:12.167 に答える