0


Java中的值传递与引用传递

我们知道java中的数据类型分为基本数据类型和引用数据类型

值传递

值传递是指将实际参数值复制一份给另一个变量,如下定义变量a=100,然后将a赋值给b,接着改变a的值为200,我们再输出a和b的值,可见a的值已经改变b没有改变,这种情况我们都知道

引用传递

而引用传递和值传递就不一样了,值传递直接将数据复制一份,而引用传递只是将数据所在的地址告诉你,但是其都是共享的同一个数据,当数据改变的数据,所有引用数据的对象的值都会改变

如下,我们将数组arr1的数据复制给arr2,然后改变arr2[3]的值为10,最后我们输出arr1的值也被改变了,这是为什么了?

栈内存

存放基本类型的变量,对象的引用和方法调用,遵循先入后出的原则。有点绕啊。在上面值传递例子中,定义了一个变量,因为变量属于基本数据类型,所以会在栈内存中开辟一个空间。当我们对把变量a传递给b时,在栈内存中执行的是数据的复制,所以b的改变不会影响a

堆内存

存放所有new出来的对象和数组。因为数组是new出来的,属于引用数据类型。所有new出来的数据都被存放在堆内存中

如上引用传递定义数组时,我们可将其分为如下步骤

  • int arr1时在栈内存中开辟一个空间
  • new int[5] 时在堆内存中开辟了一个空间,首地址为0x12345678
  • int arr1 = new int[5] 将地址值传递过去

总结

  • 值传递:将真实的数据复制一份
  • 引用传递:将数据所在的地址告诉他,但是数据只有一份

本文转载自: https://blog.csdn.net/qq_44159028/article/details/121656482
版权归原作者 山山而川' 所有, 如有侵权,请联系我们删除。

“Java中的值传递与引用传递”的评论:

还没有评论