值传递和引用传递

值传递和引用传递

值传递 (pass by value):在调用函数时,将实际参数复制一份传递到函数中,这样在函数中对参数进行修改,就不会影响到原来的实际参数;
引用传递 (pass by reference): 在调用函数时,将实际参数的地址直接传递到函数中,这样在函数中对参数进行的修改,就会影响到实际参数;

搞清楚 基本类型 和 引用类型的不同之处

int num = 10; String str = "hello";

值传递和引用传递

如图所示,num是基本类型,值就直接保存在变量中。而str是引用类型,变量中保存的只是实际对象的地址。一般称这种变量为”引用”,引用指向实际对象,实际对象中保存着内容。

搞清楚赋值运算符(=)的作用

num = 20; str = "java";

值传递和引用传递

对于基本类型 num ,赋值运算符会直接改变变量的值,原来的值被覆盖掉。对于引用类型 str,赋值运算符会改变引用中所保存的地址,原来的地址被覆盖掉。但是原来的对象不会被改变(重要)。如上图所示,”hello” 字符串对象没有被改变。(没有被任何引用所指向的对象是垃圾,会被垃圾回收器回收)。

总结

对于基本数据来说,在进行传递的时候, 将数据的值复制了一份进行的传递,所以我们也比较好理解的这种值传递;而对于对象数据类型,因为该对象本身指向的是它在内存中的地址,所以方法调用的时候,实际上是创建的地址的副本,所以在方法中对其值进行改变的时候,他的地址没有变,值也就跟着改变了;而当你重新创建一个对象的时候,它指向的便是另一个对象的地址了。这样看来跟值传递的定义便不冲突了。

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

Original: https://www.cnblogs.com/ylfmax-blog/p/15785736.html
Author: 不不不巧
Title: 值传递和引用传递

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/573596/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球