黑马程序员技术交流社区
标题:
关于String引用类型问题
[打印本页]
作者:
徐青松
时间:
2014-3-25 21:54
标题:
关于String引用类型问题
public class StrChTest {
String str="good";
char[] ch=new char[]{'n','i','g','h','t'};
public static void main(String[] args) {
StrChTest sc=new StrChTest();
sc.changed(sc.str, sc.ch);
System.out.print(sc.str+"````"+Arrays.toString(sc.ch));
}
public void changed(String stsr,char[] chs)
{
stsr="love";
chs[0]='i';
}
}
String和char[]都是引用类型,那为什么str没被改变,ch数组打印出来被改变了呢?!(和同学争论了会儿,有点领悟,共勉!)
作者:
awkflf11
时间:
2014-3-25 22:42
首先告诉你,,,,
字符串是个常量。一旦初始化就不可以被改变。
字符串是个常量。一旦初始化就不可以被改变。
给你举个例子来说明一下::
String s = "abc";
String s1 = "abc";
System.out.println(s1==s);//true.字符串是可以共享的。在内存中的常量区,一旦有,就赋予他地址。
String s="ndvjd";
s="aaa";
System.out.println(s); //字符串是ndvjd.不是s,s是引用。
作者:
Zero霖
时间:
2014-3-26 00:02
我觉得是changed方法中参数String stsr接收了sc.str在内存中的地址,也就是说stsr指向了字符串对象"good",而当参数stsr="love"时,stsr指向的是另一个字符串对象,这里只是改变了stsr的指向而没有改变sc.str变量的指向,sc.str变量仍然指向"good",所以输出当然是不变的。而参数char[] chs指向了sc.ch的字符数组,chs[0]='i'相当于sc.ch[0]='i'就会修改sc.ch数组中0位置上的元素值,输出就会改变。
作者:
shi0000
时间:
2014-3-27 23:20
因为String是final修饰的,最终的,而change()方法中的参数是另一个String,即是又创建了一个新的String对象,地址不同,名称也不同
public class StrChTest {
String str="good";
char[] ch=new char[]{'n','i','g','h','t'};
public static void main(String[] args) {
StrChTest sc=new StrChTest();
sc.changed(sc.str, sc.ch);
System.out.print(sc.changed(sc.str, sc.ch)+"````"+Arrays.toString(sc.ch));
}
public String changed(String stsr,char[] chs)
{
stsr="love";
chs[0]='i';
return stsr;
}
}
改为这样就是方法里字符串的名字 了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2