java方法的参数按值传递

java方法的参数按值传递,这种方式的重要后果是方法无法改变调用端变量

这句话不好理解,但我们只要记住一句话:调用需要参数的方法时,相当于参数名在赋值语句左侧,参数值在赋值语句右侧。

可以分为两种情况解释:

1.当方法参数是原始数据类型(int等等)时

public class Test{
	public static void main(String args[]){
		int i = 0;
		add(i);
		System.out.println("i:"+i);
	}
	public static void add(int j){
		j++;
	}
}
输出为: “i=0,可以看到,i并没有被改变
因为根据上面标红字体那句话,以上代码相当于

public class Test{
	public static void main(String args[]){
		int i = 0;
		int j = i;//根据红色字体的话,这两句相当于上面的add()方法
		j++;
		System.out.println("i:"+i);
		System.out.println("j:"+j);
	}
}
输出为: i=0,j=1”
这就是为什么说: 方法无法改变调用端变量,因为根本就是两个独立的变量啊,我在方法中改变的是我方法自己的变量。


2.当方法参数是引用数据类型(String等等或自定义类)时

public class Test{
	public static void main(String args[]){
		A a = new A();
		System.out.println("a.count:" + a.count);
		add(a);
		System.out.println("a.count:" + a.count);
	}
	public static void add(A a2){
		a2.count++;
	}
}

class A{
	int count = 0;
}

输出为:“a.count=0,a.count=1”,奇怪了,怎么又可以改变了!

因为根据上面标红字体那句话,以上代码相当于

public class Test{
	public static void main(String args[]){
		A a = new A();
		System.out.println("a.count:" + a.count);
		A a2 = a;//根据红色字体的话,这两句相当于上面的add()方法
		a2.count++;
		System.out.println("a.count:" + a.count);
		System.out.println("a2.count:" + a2.count);
	}
}

class A{
	int count = 0;
}

输出为:“a.count=0,a.count=1,a2.count=1”,怎么两个的count都改变了?

因为此时这两个独立的变量(实际上是引用)都指向的是同一个对象,而改变的是那个对象。

方法无法改变调用端变量,这句话依然成立,因为方法确实无法改变那个变量(比如将它指向另一个A对象),改变的只是它指向的对象。


总而言之,我们只要记住本文开头红色字体那句话,就不会犯迷糊了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值