Java答疑第五篇:数组和变量分别作为参数传递,为啥结果不一样?原因竟是这样.......

不是杰出者才做梦,而是善梦者才杰出。

最近在做练习题的时候,遇到了这样两道题,请看案例:
例子一:

//传递参数为变量型
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:最近几天写个函数很纠结,为啥变量作为参数值传递对结果没有影响,现在想明白了,换个说法:原来是我对你的喜欢从一开始就固定了,就算生活以任何形式变化,都无法撼动我喜欢你。以后在你写这块儿代码的时候就会想起你表白的事,这样对知识点的理解印象会更加深刻,奥利给!

有疑问欢迎留言!

点个赞,加个关注呗!嘿嘿!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值