方法参数

当初学习时一个概念也是感到很绕,真正工作反而成了肌肉记忆,其实理论知识在工作中也许会有习惯替代,但是当面对问题时,理论才会重要。
值调用–call by value 表示方法接收的是调用者提供的值。
引用调用–call by reference 表示方法接收的是调用者提供的变量地址。
一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。

绕还是不饶,其实工作用来用去也就不纠结了,一个是因为经验,一个因为可以调试。

Java程序设计语言总是采用值调用。
也就是说,方法得到的是所有参数值得一个copy,特别是方法不能修改传递给它的任何参数变量的内容。

    double a =2.5;
    staff.raiseSalary(a);
    System.out.println(a);

内存图不用画了,很简单a copy了一份让方法去加工,a没变。
java数据类型有两种:基本数据类型和对象引用。

  public static void tripleSalary( Employee staff){
    staff.raiseSalary(200);
  }

   // 构造三个真实员工
    Employee staff= new Employee("孙悟空", 25000.00, 2019, 10, 22);

    EmployeeTest.tripleSalary(staff);
    System.out.println(staff.getSalary());

扔个对象进去,加工了下,staff的工资翻了三倍。
这个也是值传递,但是变量中的值是对象地址。
相当于方法中的参数变量,和staff指向同一个对象,对象被加工了,staff也指向的对象当然变了。
但是staff的值还是没有变,他存的还是指向原来对象的地址。

地址传递在c++用的是如火如荼,但是在java中一直被误解。
来个好玩的反例,理解下方法参数一直传递的是copy值。

  public static void exchange( Employee A,Employee B){
    Employee tmp =A;
    A =B;
    B =A;
  }

  public static void main(String[] args) {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
    // 构造三个真实员工
    Employee A= new Employee("孙悟空", 25000.00, 2019, 10, 22);
    Employee B= new Employee("猪八戒", 25000.00, 2019, 10, 22);

    EmployeeTest.exchange(A,B);
    System.out.println(A.getName());
    System.out.println(B.getName());

  }

打印结果
孙悟空
猪八戒

Process finished with exit code 0

顺序并没有变,方法内部打印肯定变了。
这么copy确保了数据安全,但是影不影响性能哪?尤其是多层级嵌套对象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值