Java中的值传递与引用传递

Java中的值传递与引用传递,第1张

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]  将地址值传递过去

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5637567.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存