<求助>一个关于String对象的问题 String s = new String("s"); String s1 = s; 这样做就是把s的引用赋值给了s1吧,应该修改s1,s也会变,但是我实验一下没有s改变,求解释一下,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把s的引用赋值给了s1,应该修改s1,s不会变 我不知道你是咋修改的 java中的String的值是不能修改的 如果要修改的话用StringBuffer或StringBuilder 推荐使用StringBuilder假如:String S="123";s = "456";这其实是两个对象"123"会一直放在String缓冲区中,如果以后没用到的话 ,他就会成为垃圾,不会被回收的 ; String对象一旦被创建就无法被修改,修改s1只是修改它的引用,例如将它的引用指向“ss”,“s”对象是不会被修改的,所以s指向的仍然是“s”. 貌似搞懂了,谢谢,我想问一下,数组为什么可以改变? int[] s = new int[6]; for(int i=0;i<s.length;i++){ s[i]=i+1; System.out.println(s[i]); } int[] s1 = s; for(int i=0;i<s1.length;i++){ //System.out.println(s[i]); ++s1[i]; System.out.println(s[i]); }这样也是把s的引用赋值给了s1,修改s1,s也变化了 String s = "s";String s1 = s; System.out.println(s==s1);s1+="abc";System.out.println(s==s1);System.out.println(s);结果:truefalsess1 = s; s的引用赋值给了s1,那么 s、s1指向了同一个字符串对象。所以第一个打印出了trues1+="abc"; 这里修改了s1的值,按理说s、s1指向了同一个对象,打印s的值应该是也是sabc才对。可是在java中使用+串联字符串会产生一个新的字符串对象,所以此时内存中有两个字符串对象,一个 "s" ,一个 "sabc"。此时s1指向的正是第二个对象,s则仍然指向那个"s"字符串对象。 因为字符串赋值,传递的是引用(即地址),也就是说,s给s1赋值,是让s1指向s所在的地址,因此s1改变不会引起s的改变。希望对你有帮助! 你好,我用String数组弄一个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]); }结果输入abcdafbfcfdfs1数组改变,s也改变了 这个跟String没有关系了,数组是引用传递的。你这里s1和s指向的是同一个对象。你这两个例子没有可比性 IO刚学,怎么错了,为什么结果会是-1?txt.txt文件是随便字母 JAVA线程问题 关于怎样关闭Connection,ResultSet,PreparedStatement 关于IO的小题目 [java网络通信]如何发送一个结构体 我想手工运行一个程序,为什么不成功? 一个class中最多能定义几个常量? 为何遇上 java.lang.NoClassDefFoundError: sun/awt/X11GraphicsEnvironment ? 请问文件流有没有按行读取的方法 如何在jbuilder 5中添加一个jdbc驱动,详细过程? 字符串编码问题. 多线程问题
java中的String的值是不能修改的 如果要修改的话用StringBuffer或StringBuilder 推荐使用StringBuilder假如:String S="123";
s = "456";这其实是两个对象
"123"会一直放在String缓冲区中,如果以后没用到的话 ,他就会成为垃圾,不会被回收的 ;
int[] s = new int[6];
for(int i=0;i<s.length;i++){
s[i]=i+1;
System.out.println(s[i]);
}
int[] s1 = s;
for(int i=0;i<s1.length;i++){
//System.out.println(s[i]);
++s1[i];
System.out.println(s[i]);
}
这样也是把s的引用赋值给了s1,修改s1,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也改变了
你这两个例子没有可比性