标题: 这段程序的打印为什么是:good and gbc [打印本页] 作者: mf152 时间: 2013-9-18 17:22 标题: 这段程序的打印为什么是:good and gbc 本帖最后由 杨增坤 于 2013-9-22 21:01 编辑
这段程序的打印为什么是:good and gbc 是怎么推的?
public class Example{
String str=new String("good");
char[]ch={'a','b','c'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
Sytem.out.print(ex.ch);
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}
作者: Cway㊣ 时间: 2013-9-18 17:43
通过new String()与str="test ok"是2个不一样的内存块,所以,你在change()函数中只是重新在内存中开辟了一块临时内存存放“test ok”,并未改变str=new String()《这个是存在与堆内存中的》中str的值,而ch不同,你通过ch[0]改变的实际就是在Example类中创建的那个ch,string是一个特殊的对象作者: Cway㊣ 时间: 2013-9-18 17:51
public class Example{
String str=new String("good");
char[]ch={'a','b','c'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
Sytem.out.print(ex.ch);
}
public void change(String str,char ch[]){
str="test ok"; //实际上重新在栈内存中开辟了一片内存 值为“test ok”并将他赋给str,这里的str与上面的new String()的对象引用变量的str是不一样的
ch[0]='g'; //这里的ch与上面的ch都是指向同一堆内存地址
}
} 作者: 坚持。 时间: 2013-9-18 23:10
public class Example{
String str=new String("good");
char[]ch={'a','b','c'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
Sytem.out.print(ex.ch);
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}