方法调用之间的值传递与引用传递

方法之间的值传递与引用传递

在java中在方法的调用时需要传递参数时,传参的方式其实是有两种

值传递

值传递:(形参数据类型是基本数据类型),在方法调用的时候,实际参数把它的值传递给对应的形式参数,形式参数只是用实际的值默认初始化了自己的存储单元的内容,是分别位于两个不同的存储单元中,所以方法的执行中形参值的改变是不会引起实参值的改变

public class Demo {
    public static void main(String[] args) {
        int a = 5;
        Demo one = new Demo();
        one.demo(a);//将a的值直接初始化给了demo()这个函数中的b
        System.out.println("a:" + a);//5
    }

    //参数类型作为基本数据类型,就是将变量本身的值传递赋给了另一个值
    //所以之后的改变和之前的数据值,已经再没有任何关系了。
    public void demo(int b) {
        System.out.println("b1:" + b);//5
        b = 15;
        System.out.println("b1:" + b);//15
    }
}


在这里插入图片描述

引用传递

引用类型:它的值其实是对象在内存空间中的地址,而具体的对象是存在在堆中
引用传递(形参数据类型是引用数据类型):也叫做传地址,传到是对象在内存空间所在位置的编号。所在在方法调用时,实际参数就把他对应的地址传给形式参数,这是实际参数和形式参数就对应于同一个地址,所以在方法执行时,对形式参数的操作其实就是对实际参数的操作,这个结果在方法结束后会被保留下来的
所以在方法执行时形式参数的改变会影响到实际参数的值

public class Demo {
    public static void main(String[] args) {
        Cat xh = new Cat();
        xh.name = "小黑";
        Demo one = new Demo();
        System.out.println("小黑1:" + xh.name);
        one.test(xh);
        System.out.println("小黑2:" + xh.name);
    }

    //参数类型作为引用数据类型,就是将变量在内存空间的地址给了另一个值(传的不是本身)
    //所以之后的改变和之前的数据值,是空间中地址里面的值
    //这样形参中的值变化,实参中的值也会变化(因为两个值的是同一个东西)
    public void test(Cat cat) {
        System.out.println("name1:" + cat.name);
        cat.name = "罗小黑";
        System.out.println("name2:" + cat.name);
    }
}


在这里插入图片描述
引用类型变量不是持有对象的本身,只是拥有对象的地址,通过地址来间接的访问对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值