深入了解java值传递
https://www.jb51.net/article/117083.htm
https://blog.csdn.net/qq_26542493/article/details/103898866
值传递-传递的是基本数据类型值(区分下午引用传递,称“值”传递)
指在调用函数时,将实际参数复制一份传递给函数,这样在函数中修改参数时,不会影响到实际参数。值传递是针对与基本数据类型来说的,一般的基本数据类型的变量和值是存在虚拟机栈中的,在传参的时候将栈中存储的值复制一份传递到形参中。
引用传递是针对与对象类型来说的,其实引用类型也是值传递,只不过传递的内容是一个引用地址。
注意我们口头上常说的值传递是指白话文里的:传递给形参的内容是个值。上面的“值”转递有点差别,和引用传递都是值传递,做区分也只是针对值的数据类型做的区分,本质上它们都是传递值。
public class ObjectTrans { public static void main(String[] args) { String name = "123"; SChange(name); // String是对象,传递的值是引用地址 System.out.println(name); } public static void SChange (String str) { str = "234"; // String值不可变,所以重新开辟空间,str指向新的空间 } }
如果使用字符串变量,不会开辟新的空间,name和str指向的还是同一块空间。
public class ObjectTrans { public static void main(String[] args) { StringBuilder name = new StringBuilder("123"); SChange(name); System.out.println(name); } public static void SChange (StringBuilder str) { //str = "234"; str.append("234"); } }
前进时,请别遗忘了身后的脚印。