Java到底是值传递还是引用传递?

在使用Java函数,常常会有一个疑问,我传过去的是参数的值还是参数的地址。

下面,说一下Java的参数传递:

首先,要说明的是Java的数据类型

在Java中只有三种引用类型:

  • 接口
  • 数组

除上面几种类型外的所有类型都是基本类型。

使用基本类型的时候,会把这个放入虚拟机栈中,而引用类型的变量会先在虚拟机栈中声明一个变量,然后把该变量指向在堆中存放地址

在主函数中往声明函数传参时,主函数会有一个自己的栈,该栈中存放主函数中声明的变量值,当调用函数时,会有一个新的栈,而该栈中会有一个传递参数的副本。

当传递的是一个引用类型的变量时,同样也会创建一个声明函数栈,在该栈中也会有一个参数的副本,不过该副本和主函数上的变量在栈中指向的地址是相同的。如果在函数修改了该地址的值,主函数中变量的值也会发生变化。

如果在函数中修改了变量指向的地址,同时修改了其中的值,主函数中的变量不会有任何变化,因为主函数变量指向的地址并没有发生变化,该值也没发生变化。

所以,总的来说在Java中不存在引用传递,只有值传递!!! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值