public class Example {
String str = "good";
char ch[] = { 'a', 'b', 'c' }; public static void main(String args[]) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.println(ex.str + "and" + ex.ch[0] + ex.ch[1] + ex.ch[2]);
} public void change(String str, char ch[]) {
str = "test ok";
ch[0] = 'g';
}
}
为什么输出结果是goodgbc,str没有发生变化,ch[]却变化了????
String str = "good";
char ch[] = { 'a', 'b', 'c' }; public static void main(String args[]) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.println(ex.str + "and" + ex.ch[0] + ex.ch[1] + ex.ch[2]);
} public void change(String str, char ch[]) {
str = "test ok";
ch[0] = 'g';
}
}
为什么输出结果是goodgbc,str没有发生变化,ch[]却变化了????
str传进去同传值差不多, ch[]是数组同传地址差不多.
改成this.str = "test ok"; str就会变化了
不然str只是传进来的那个参数,也只是给传进来的那个参数赋值,不是你上面定义的那个变量,对相同的变量名,要注意变量的作用范围,如果使用相同的变量名,要学会使用this
基础还是要打扎实,希望你学习顺利
数组跟指针传递类似,是对指针的值进行传递。
因为,我写一个类,会写清楚构造器,像这个类包含2个成员变量,就应该写个带参数的构造器,
这样,创造对象时你就拥有了这个类的成员变量,然后一切都变清晰了,下面的change方法还需要
带参数吗?
打好基础吧
前一个参数只是做了一个对good的拷贝,拷贝过来的东西无论如何改变也变不了原来的。
后一个参数是一个字符数组。
char ch[];
ch其实是一个指针。(C里是这样,java里不是甚清楚)
ex.change(ex.str, ex.ch);
这样调用change之后就把两个ch指向了同一块内存区域,改变其中任何一个另一个也跟着变。
str = "test ok";
ch[0] = 'g';
}
你把值传过去了,这里的str,不是你要改的str,其实就相当于,重新命名的一个变量而已,如果你改成这样,也是一样的效果的
public void change(String str_temp, char ch[]) {
str_temp = "test ok";
ch[0] = 'g';
}
把引用传递来一起学习,比较容易理解
如果是对象 也是传对象引用的值--------------------------------------------
http://www.soft51down.cn