-5
  String str=new String("JAVA");
 System.out.println("value of str before "+str); //JAVA
 String str2=null;
 str=str2;
 System.out.println("value of str"+str);  //null
 System.out.println("value of str2"+str2);//null

 str="Prog";
 System.out.println("value of str"+str); //prog 
 System.out.println("value of str2"+str2);//null

質問 1 文字列が不変の場合、なぜ str の値が変化するのですか??

 Student stu= new Student(123);        
 System.out.println("value of stu before "+stu); //some address is printed
 Student stu2=null;
 stu=stu2;
 System.out.println("value of stu"+stu);  //null
 System.out.println("value of stu2"+stu2);//null
 Student stu3=new Student(456);
 stu=stu3;
 System.out.println("value of stu"+stu); //some new address 
System.out.println("value of stu2"+stu2);//null

Ques 2.String と Object は同じように動作します。では、なぜ String は不変で Object は可変なのか。どこが違うの

4

5 に答える 5

0

StringJava では、言語の一部にすぎない s を使用できません。また、コードでは初期化されstr2ません。

于 2013-09-07T19:27:34.243 に答える
0

Strings は決して変更できません。それがこの言語の核となる特徴です。

ただし、strstr2が変更可能な別のものである場合、 setは同じオブジェクトを指すようにstr = str2設定されるだけであり、 への変更は への変更になります。特定のケースでは、が初期化されていないため、コードがコンパイルされないことに注意してください。strstr2str2strstr2

于 2013-09-07T19:25:08.087 に答える
-1

両方の文字列が同じメモリを使用します。ただし、str を変更しても str2 は変更されず、その逆も同様です。これは、Java の文字列が文字列プールに格納されるためです。次のコードを考慮してください。

String str1 = "hello";
String str2 = "hello";

これらの文字列は両方とも、文字列プール内のメモリ内の同じ場所を指します。文字列を「作成」すると、文字列が文字列プールに既に存在するかどうかがチェックされ、存在する場合はその文字列が指されます。これには多くの意味があります。たとえば、次のことを考慮してください。

String str1 = "hello";
String str2 = "hello";
str2 = str2 + " world";

この場合、"hello" が文字列プールに追加され、str1 がそれ​​を指します。str2 は、「hello」が存在することを確認し、存在することを確認してから、それもポイントします。最後の行では、文字列プールにまったく新しい文字列 "hello world" が作成され、str2 がそれを指します。

于 2013-09-07T19:30:00.143 に答える