Java 到底是值传递还是引用传递?
java是值传递
在技术复盘中,我发现我错误的理解为,传递值是值传递,传递引用传递。
JVM中有2个区域一个栈一个堆,其中JVM的栈中已经事先放好了基础数据例如数字和字母。
例如:
int num=1
String str="a"
其实是栈中已存在,并不会开创新的堆空间
例入:
User user;
其实是只在栈中进行操作。
如果我们对user进行创建对象操作。
这时候会在堆中开辟空间,生成地址指向栈。
user=new User();
我们对user进行赋值操作
user.setName("张三");
user.setName("李思");
我们这时候发现堆指向栈中的地址并没有发生改变,则我们证明java是值传递。
可以看以下图例,其实堆中的详细地址并没有发生改变

得出的结论:上面的参数其实是值传递,把实参对象引用的地址当做值传递给了形式参数。
参考文章:https://www.zhihu.com/people/hollis-11

浙公网安备 33010602011771号