值传递和引用传递的区别
Posted swqblog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了值传递和引用传递的区别相关的知识,希望对你有一定的参考价值。
示例代码:
public static void main(String[] args) { int b = 0; change(b); System.out.println(b); } public static void change(int a) { a = 1; }
结果:
为什么b的值不会被修改为1呢?
我们知道每个方法执行的时候都会在虚拟机栈中生成一个栈帧,而且这个栈帧中存储着局部变量表,操作数栈,动态链接等。
而change这个方法中的int a就保存在局部变量表中。但是对于int b来说,则保存在堆中。也就是说a和b是两个不同的东西。
而且栈帧中的int a只是堆中int b的一个副本。
示例代码:
public static void main(String[] args) { StringBuffer str = new StringBuffer("hello"); ReferencePassing(str); System.out.println(str); } public static void ReferencePassing(StringBuffer sb) { sb.append(" world"); }
结果:
显然可以看到str的值已经改变了。
同样执行ReferencePassing方法执行的时候,虚拟机栈同样会生成一个栈帧。只不过局部变量表中存放的是sb的引用地址,而这个地址指向的正是堆中的str对象。
所以堆中的str对象才会被修改。
以上是关于值传递和引用传递的区别的主要内容,如果未能解决你的问题,请参考以下文章