Java 传值还是传引用?

    看了很多Java的模拟笔试题,几乎每套题里都有这么个选择题:Java参数是传值还是传引用。

    每次遇到这个选择题我就很郁闷,因为我不明白何为“传值”,何为“传引用”,虽然我确实了解Java参数传递过程中发生了什么。这里我就不因个人的愚来钝混淆视听了,总之,不管是以后这种题以什么形式提出都好,理解Java参数传递过程才是王道。

 

    先看primitive型数据的情况:

  1. public static void tripleValue(double x) //
  2. {
  3.     x = 3 * x;
  4. }
  5.    。。。
  6.  //call this method
  7.  double percent = 10;
  8.  tripleValue(percent);
  9. System.out.println("After: percent =" + percent ); // 10

    当进入到tripleValue方法中时,x是percent的一个copy,因为percent是primitive的,因此它的copy也是primitive,也就是说x就是一个单纯的值,对这个“值”做操作不会影响方法外面的percent变量的,因此操作完成后percent依然是10。

   

    看object型数据的情况:

  1. public static void tripleSalary(Employee x)
  2. {
  3.    x.riseSalary(200);
  4. }
  5. 。。。
  6. Employee harry = new Employee(. . .);
  7. tripleSalary(harry);
  8. System.out.println("After: salary=" + harry.getSalary()); // works

    执行这段代码时,当进入到tripleValue方法中后,x是harry的一个copy,harry是指向一个Employee对象实例的引用,因此x也是同样的一个引用。此时,通过x调用Employee对象实例的riseSalary方法,可以修改对象实例的salary值,又因为harry也指向同一对象,因此harry.getSalary()所得值也发生了变化。

    但是,切记,x仅是harry的一个copy,在对x做任何操作之前,它们之间的唯一联系仅是指向同一对象,但如果在方法中我们改变了x的指向,那么这个变化是不会影响到harry的。

 

    以上就是Java参数传递的过程。那个选择虽然现在也不明白,但是还是说一下通用的答案比较完整:

    

  Java参数是传值嗒~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值