Java方法参数之参数传递方式

Java的参数传递总是按值调用

无内鬼,先来整个例子:

Employee a = new Employee("Alice");
Employee b = new Employee("Bob");
swap(a,b);


public static void swap(Employee x,Employee y){
    Employee temp = x;
    x = y;
    y = temp;
}

        我们知道这里给函数 swap 传进来两个对象的引用,然后在内部将他们两个进行了交换。按理来说如果 Java 对对象采用的是按引用调用则,输出来应该是交换成功的。

        但是结果,并不是这样而是他们根本没有被交换,所以 Java 参数传递是按值掉用的。

我们来分析一下原因:

       一开始传入 swap 函数中时,a,b本来就已经指向了 Employee 类的实例了,而在 java 中并不是把两个引用原封不动的传到函数内,而是各拷贝了一份引用 x,y 也指向了 Employee 类的实例。

        在函数内进行交换时,只交换了 x,y 引用的指向,它们确实交换成功了。但是函数结束后变量销毁,我们输出的还是 a,b 的引用所指向的实例,a,b 本身并没有发生改变,所以在 Java 这里并没有发生交换,体现了并不是按引用传递的。

       我们看下面代码:

User u1 = new User();
User u2 = new User();
u1.name = "张三";
u2.name = "李四";
exchange2(u1, u2);
System.out.println(u1.name);
System.out.println(u2.name);

public static void exchange2(User x,User y) {
	String temp = x.name;
	x.name = y.name;
	y.name = temp;
}

        我们仍把对象的引用 a,b 传进函数内,函数内仍会生成引用的拷贝 x,y,但是通过 x 直接调用到了实例的属性 name并对其进行了交换,当函数结束时虽然销毁了引用 x,y 但是实例的值已经发生了改变。

所以这下你应该弄懂了 Java 参数传递总是值传递了。

下面总结一下 Java 方法中参数的使用情况:

  • 一个方法不能修改一个基本数据类型的参数。
  • 一个方法可以改变一个对象参数的状态。
  • 一个方法不能让对象参数引用一个新的对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值