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 ");
System.out.print(ex.ch);
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}请问结果是good and gbc 为什么啊? 这里string不是传来地址吗? 菜鸟问题 请高手回答 谢谢
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 ");
System.out.print(ex.ch);
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}请问结果是good and gbc 为什么啊? 这里string不是传来地址吗? 菜鸟问题 请高手回答 谢谢
肯定不是传址
String str = new String("good");
str = "str";
仔细看看这两个就知道为什么了
实际上这两个指向的不是一片类存.
只更改了本地变量的值。如果要更改类的变量值,需要用
this.str="test ok";
java中传的都是值,但是要知道传的什么值?
对于基本类型的话,就不说了
但是对于引用类型的话,传的值就是内存地址,所以你的str和ch都是一样的
但是String比较特殊,因为str="test ok", 相当于是str = new("test ok");所以你没有对原来的做出改变,这个知道不?
而ch的话,都是指向的同一块内存,你改变了ch[0],原来的肯定改变了
关于这个问题,你可以找找java参数传递的相关帖子。。
你看看就明白了。。
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 ");
System.out.print(ex.ch);
}
public void change(String str,char ch[]){
str = "aaaaa";
this.str = "bbbbb";
System.out.println("str = " + str);
System.out.println("this.str = " + this.str);
ch[0] = 'g';
}
}
输出:
str = aaaaa
this.str = bbbbb
good and gbcstr只是个临时变量,并没有代替成员变量。要是想改变成员变量,必须使用this指向它
str = aaaaa
this.str = bbbbb
bbbbb and gbc
另外Java里的方法参数都是按值传递的,
对方法change(String str,char ch[])的调用:
ex.change(ex.str,ex.ch);
可以理解为str参数是ex.str的一个副本,两者引用同一个String对象,
在change内部为str参数赋值,只是改变了str引用的对象而已。
也就是说,执行对str的赋值语句之前,是这样:
str -> String("good")
ex.str -> String("good")
执行赋值语句之后,变成:
str -> String("aaaaa")
ex.str -> String("good")