JAVA 方法参数解析(引用传递?值传递?)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

在日常写程序过程中,我们会把参数传到方法里面去,然后方法就会调用我们的参数,那么在java里面到底是按照值传递还是引用传递?在这里Mark下


一、结论

首先在这里先说明结论:根据java核心卷一里所写,java总是采用按值调用。一切传引用其实本质上是传值

二、代码举例

1.当传入的是变量

public class Test {
    public static void b(double x) { //x提升3倍
        x = x * 3;
    }
    public static void main(String[] args){
        double percent=10;
        b(percent);
        System.out.println("percent="+percent);
    }
}

运行结果
在这里插入图片描述
分析:
这里引用下书中的图
描述在哪里
当我们传入percent变量的时候,x会自动初始化为percent变量的拷贝,值为10,当x*3时,x的值确实变为了30,但是percent的值不变,因为x和percent不是一个变量,而且当我们的调用结束了,x这个局部变量就会消失,不会影响到percent变量。所以说,一个方法不可能修改一个基本数据类型的参数

2.当传入的是变量的引用

代码如下(示例):

class Employee{
    private int salary;

    public Employee(int salary) {
        this.salary = salary;
    }

    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }
    public void raiseSalary(int times){
        salary=salary*times;
    }
}


public class Test {
    public static void b(Employee x) {
        x.raiseSalary(3);
    }
    public static void main(String[] args){
        Employee employee1=new Employee(1000);
        b(employee1);
        System.out.println("salary="+employee1.getSalary());
    }
}

运行结果
在这里插入图片描述
分析
我们首先建立个Employee类,在mian方法里面,利用构造函数初始化这个类,当前employee1的工资为1000,当我们调用b方法时,我们把employee1当做参数传进去,在这里注意的是,当我们new一个对象的时候,new出来的是地址,即employee1变量里面存储的是一个地址,这个地址指向Employee类。所以我们传入到b方法的也是一个地址,按照按值传递的思想,x是employee1地址的拷贝,x也指向了这个初始化的Employee类(参考下面图片,图片里的harry用employee1代替),也就是说,x与employee1不是同一个变量,但是保存的是同一个地址,同时指向同一个类,当利用x调用raiseSalary方法,工资扩大三倍后,x 和 employee1 同时引用的那个 Employee 对象的工资提高了 3倍。方法结束后,参数变量 x 不再使用。当然,对象变量 employee1继续引用那个工资增至 3倍的雇员对象
在这里插入图片描述

所以说,所谓的“传递引用其实还是以值传递为根本”。


总结

•一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)。
•一个方法可以改变一个对象参数的状态。
•一个方法不能让对象参数引用一个新的对象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值