首页 > 编程知识 正文

关于java值传递的个人理解,java值传递是什么意思

时间:2023-12-27 22:26:36 阅读:324600 作者:TQKA

本文目录一览:

java中的值传递和引用传递的区别

值传递和引用传递是c中的概念,在java中可以用于方便理解,但是java中是值传递的。说说区别吧,昨天刚好看见这个问题。8个基本数据类型是值传递,即方法内对其修改是不会改变实参的,其他引用类型(除了string)可以理解为引用传递,传进方法内部的是一个地址,可以理解为房子的钥匙,你有了钥匙,照样可以对房子进行改变,是吧。那为什么string不行呢?因为string是不可改变的,虽然它也是传了地址,但已经是第二个引用(b)了 ,当你对形参进行改变,这时候b会指向新的string对象。这时候原来的引用a是没有改变的,还是指向第一个对象。

不懂可以追问,共同学习

JAVA基础问题,到底是值传递还是引用传递?

java中方法参数传递方式是按值传递。所谓值传递,就是将实际参数值的副本(复制品)传入方法内,而自己本身不会受到任何影响。

如果参数是基本类型,传递的是基本类型的字面量值的拷贝。 

如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝。

6、如何来理解“java中没有指针传递,只有值传递”这句话。

对于基本数据类型,int long这些,传递的就是值本身,所以是值传递

对于对象引用类型,参数传递时传递的不是对象本身,也不是对象指针,而是对象在内存中位置的一个引用,这个应用本质上就是一个值,只不过底层会根据这个值找到对象。所以无论哪种数据类型,从java层面来看其本质都是值传递

为什么说Java中只有值传递

Java中其实还是值传递的,只不过对于对象参数,值的内容是对象的引用。

无论是值传递还是引用传递,其实都是一种求值策略(Evaluation strategy)。在求值策略中,还有一种叫做按共享传递(call by sharing)。其实Java中的参数传递严格意义上说应该是按共享传递。

按共享传递,是指在调用函数时,传递给函数的是实参的地址的拷贝(如果实参在栈中,则直接拷贝该值)。在函数内部对参数进行操作时,需要先拷贝的地址寻找到具体的值,再进行操作。如果该值在栈中,那么因为是直接拷贝的值,所以函数内部对参数进行操作不会对外部变量产生影响。如果原来拷贝的是原值在堆中的地址,那么需要先根据该地址找到堆中对应的位置,再进行操作。因为传递的是地址的拷贝所以函数内对值的操作对外部变量是可见的。

简单点说,Java中的传递,是值传递,而这个值,实际上是对象的引用。

而按共享传递其实只是按值传递的一个特例罢了。所以我们可以说Java的传递是按共享传递,或者说Java中的传递是值传递。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。