首页 > 代码库 > java中值类型和引用类型的不同实例(三)

java中值类型和引用类型的不同实例(三)

毫无疑问,函数传值和函数传引用的区别是 传值是传一份数据拷贝 传引用的话 是可以操纵对象.

但是一般人忽略的是传引用其实也是传一份引用的副本.

示例如下:

 1 class Number 2 { 3     public int num; 4 } 5 public class Topcoder 6 { 7     public static void  main(String[] args) 8     { 9         Number a=new Number();10         a.num=1;11         Number b=new Number();12         b.num=2;13         swap(a,b);14         System.out.println(a.num+" "+b.num);15     }16     17     static void swap(Number a,Number b)18     {19         Number temp;20         temp=b;21         b=a;22         a=temp;23     }24 }

output为:

1 2

分析如下:

swap前  

引用a----------->Number(num:1)

引用b----------->Number(num:2)

swap中

由于函数只是传了一份引用的副本并不对引用a和b造成任何影响 所以可以忽略对其影响

swap后

因为swap函数对引用a和b无任何影响,并且swap函数中并无改变对象内容,所以没有变化

java中值类型和引用类型的不同实例(三)