日期:2014-05-20  浏览次数:20811 次

<求助>一个关于String对象的问题
String s = new String("s");
  String s1 = s;
  这样做就是把s的引用赋值给了s1吧,应该修改s1,s也会变,但是我实验一下没有s改变,求解释一下,谢谢!

------解决方案--------------------
我不知道你是咋修改的
java中的String的值是不能修改的 如果要修改的话用StringBuffer或StringBuilder 推荐使用StringBuilder

假如:String S="123";
s = "456";

这其实是两个对象
"123"会一直放在String缓冲区中,如果以后没用到的话 ,他就会成为垃圾,不会被回收的 ;


------解决方案--------------------
String s = "s";
String s1 = s;
System.out.println(s==s1);
s1+="abc";
System.out.println(s==s1);
System.out.println(s);
结果:
true
false
s
s1 = s; s的引用赋值给了s1,那么 s、s1指向了同一个字符串对象。所以第一个打印出了true
s1+="abc"; 这里修改了s1的值,按理说s、s1指向了同一个对象,打印s的值应该是也是sabc才对。可是在java中使用+串联字符串会产生一个新的字符串对象,所以此时内存中有两个字符串对象,一个 "s" ,一个 "sabc"。此时s1指向的正是第二个对象,s则仍然指向那个"s"字符串对象。
------解决方案--------------------
探讨

String[] s = {"a","b","c","d"};
for(int i=0;i<s.length;i++){
System.out.println(s[i]);
}
String[] s1 = s;
for(int i=0;i<s.length;i++){
s1[i]+="f";
System.out.println(s[i]);
}
结果输入a
b
c
d
af
bf
cf
df
s1数组改变,s也改变了