[一篇看懂] java到底是引用传参还是值传参

1. 总结

  • java 中基础类型是值传参,对象类型是引用传参
    • 对象类型: new出来的都是, 包括数组

2. 值传参举例

public class Main {
  public static void main(String[] args) {
	  int x = 3;
	  Main.swap(x);
	  System.out.println(x);
  }
  static void swap(int x) {
	  x = 10;
  }
}
  • 函数中的值不影响函数外的值

3. 引用传参

public class Main {
  public static void main(String[] args) {
	  int[] x = new int[10];
	  x[0] = 10;
	  Main.swap(x);
	  System.out.println(x[0]);
  }
  static void swap(int[] x) {
	  x[0] = 12;
  }
}
  • 结果为12

3.1. 修改引用的部分

package com.wuqi.p1;
import com.wuqi.p2.User;
public class PassTest2 {
    public static void main(String[] args) {
        User user = new User();
        user.setName("wutianqi");
        //传递对象,因为是将指向User的引用user传递给了param,
        //在函数中param.setName会反应到真实的对象中去。
        pass(user);
        System.out.println("my name is " + user.getName());
    }

    private static void pass(User param) {
        param.setName("wuqi");
        System.out.println("my name is " + param.getName());
    }
}

3.2. 修改引用

package com.wuqi.p1;

public class PassTest3 {
    public static void main(String[] args) {
        String name = "wutianqi";
        
        //这里传递字符串参数,按照我们以前的观点这里应该传递的是将指向字符串的name引用
        //传递给param,那么在pass函数中修改参数的值会直接影响到name引用指向的字符串
        //的值,那么输出的结果依此应该是 my name is wuqi  my name is wuqi
        pass(name);
        System.out.println("my name is " + name);
    }

    private static void pass(String param) {
        param = "wuqi";
        System.out.println("my name is " + param);
        
    }
}
  • 此处的param = "wuqi"是将整个引用重新赋值了, 不是原来的引用了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值