知识积累:JAVA的引用传递和值传递

来源:互联网 发布:音乐剪辑软件手机 编辑:程序博客网 时间:2024/05/16 18:56

今儿读了一篇文章,有关值传递和引用传递的。

我们总认为引用传递就是变量名的赋值,因为往往变量名的值就是这个变量所占的地址。

然而,地址有很多种,我们看一下这个例子(引自文章):

public class Employee {      public String name=null;      public Employee(String n){          this.name=n;      }      //将两个Employee对象交换      public static void swap(Employee e1,Employee e2){          Employee temp=e1;          e1=e2;          e2=temp;                  System.out.println(e1.name+" "+e2.name); //打印结果:李四 张三      }      //主函数      public static void main(String[] args) {          Employee worker=new Employee("张三");          Employee manager=new Employee("李四");          swap(worker,manager);          System.out.println(worker.name+" "+manager.name); //打印结果仍然是: 张三 李四      }  }  
文章说道:实际的交换没有成功的原因是,形参的变量地址是实参变量地址的拷贝,虽然他们的地址值是一样的,但是!

形参和实参的内存地址并不一样。因为在JVM运行上面代码时,会在java栈中分别push两个帧栈的内存空间分别存储两个方法的变量中的地址。所以虽然他们的地址值一样,但是内存地址并不一样。所以,区分值传递还是引用传递,根本是看他们所占的内存空间是否一样,注意是内存地址!


参考文章链接:

http://hxraid.iteye.com/blog/428856



0 0