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

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

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

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

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

  • 接口
  • 数组

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

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/ljcgit/article/details/83548824