java是值传递还是引用传递

最近看c#时看到c#中对象都是引用传递,想到了java。

先说下结论,java是值传递的,没有引用传递这一说。

public static void main(String[] args) {
List<String> list = new ArrayList<>();
changeList(list);
System.out.println(list.size());

}

public static void changeList(List<String> list) {
List<String> a = new ArrayList<>();
a.add("123");
list = a;
}


这个例子,假如有人认为是引用传递的话,那么main方法中的list的值是会改变的,也就是说list的引用(栈中的地址值)发生了变化,对用到heep发生了变化,可是 事实是没有发生变化,为什么呢?  因为ava是值传递的,传递的只是list这个变量也就是引用的值,对应到内存就是栈的那串地址。然后在changeList中传入的是原来list的引用值,所以在changeList‘中改变形参的值,值不会影响原来的对象的。值传递我感觉也就是这么个意思。基本变量就不说了,网上很多例子。

public static void changeList2(List<String> list) {
list.add("123");
}

将方法修改下,此时main中的list发生了变化,其实很好理解,因为虽然传的是引用的值,但是传入changeList2的形参和main中的list值是一样的,也就是对应堆中的对象是同一个。无论谁改变它的值,指向它的引用去查询的时候都是同一份对象。

写的很粗糙,我比较懒。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值