不是杰出者才做梦,而是善梦者才杰出。
最近在做练习题的时候,遇到了这样两道题,请看案例:
例子一:
//传递参数为变量型
public class Study{
public static void main(String [ ] args){
String s[]={"ab","c","d"};
reverse(s[0],s[1]);
System.out.println("s[0]="+s[0]+" s[1]="+s[1]);
}
static void reverse(String s0, String s1){
String s;
s=s0;
s0=s1;
s1=s;
}
}
结果显示:
例子二:
//传递参数为数组型
public class Study{
public static void main(String [ ] args){
String s[]={"ab","c","d"};
reverse(s);
System.out.println("s[0]="+s[0]+" s[1]="+s[1]);
}
static void reverse(String s[]){
String s0;
s0=s[1];
s[1]=s[0];
s[0]=s0;
}
}
结果显示:
过程分析:
通过上面两个例子,我们可以发现,代码大致类似,只是一些细节做了微调整,为啥结果会不一样呢?第一个例子中传递的参数是变量型为单向值传递,不会改变原变量所指向的对象,第二个例子中传递的参数是数组为引用对象传递,经过一系列操作,会改变原变量所指向的对象,故所得结果会发生改变。
这儿我写了一个简单的Demo,特别适合学程序类的人表白,请看:
public class Study{
public static void main(String [ ] args){
W w = new W(); //创建引用对象
w.fun(); //调用fun()方法
}
}
class W{
void fun() {
String wu[]={"我依然喜欢你"}; //定义数组并初始化
reverse(wu[0]);
System.out.println("最终得到的结果是="+wu[0]); //输出最终结果
}
static void reverse(String wu0){
String wu1 ="xxx讨厌我";
String wu2="xxx嫌弃我";
String wu3="xxx不喜欢我";
wu0=wu1;
wu1=wu2;
wu2=wu3;
wu3=wu0;
}
W(){ //默认构造方法
}
}
结果显示:
PS:最近几天写个函数很纠结,为啥变量作为参数值传递对结果没有影响,现在想明白了,换个说法:原来是我对你的喜欢从一开始就固定了,就算生活以任何形式变化,都无法撼动我喜欢你。以后在你写这块儿代码的时候就会想起你表白的事,这样对知识点的理解印象会更加深刻,奥利给!