java方法如何传递引用_java中的值传递和引用传递

今天,在研究值传递和引用传递的时候,突然发现了这个问题,以前都是理解值传递就是复制一个值过去,引用传递就是传地址,现在看来当时的理解真的是太片面了。

简单理解一句话:java只有值传递。

我们先来了解一下什么是值传递和引用传递。

值传递:@Test

public void demo(){

int age = 999;

System.out.println(age);

setAge(age);

System.out.println(age);

}

public void setAge(int age){

age = 123;

System.out.println("setAge方法中的age:" + age);

}

运行结果:

dc734fe6d24918b23f04d5cdcfb1dadc.png

我们可以看到,在方法里面的变量的值已经修改了,但是并没有影响到外层的age,这个就是值传递,java基本数据类型都为值传递(int、long、char、byte、float、double、short、boolean)。

我们用一张图来简单描述一下:

ee61a3a56556b29da333583b0db21df7.png

值传递相当于把age复制了一份,在相当于在内存中又开辟了一块空间来存储,在方法中修改了age(备份)是修改的备份的age,所以对本体的age没有影响。

引用传递:@Test

public void demo3(){

int[] arr = {1, 2, 3};

System.out.println(arr[0]);

setArr(arr);

System.out.println(arr[0]);

}

public void setArr(int[] arr){

arr[0] = 999;

System.out.println("setArr方法中的arr[0]:" + arr[0]);

}

输出结果:

3c88d0395e8b339564ec55cf19ceb75b.png

我们看到,引用数据类型在方法内修改之后,方法外的值也发生了改变。String、类、数组这些都属于引用数据类型。

图解:

ffe0cf7b1672622fef06cacdc3154f54.png

引用类型,相当于拷贝过去地址,地址在堆中实际是一块内存,所以二者操作的是同一内存,在方法中修改,方法外面也会改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值