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

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

在java中,数组是对象,所以也是种引用类型。

以下示例代码会展示 一 数组中的值为基本类型 二 数组中的值为对象 三 数组的直接赋值和clone赋值

示例1 基本类型数组赋值

 1 public class Topcoder 2 { 3     public static void  main(String[] args) 4     { 5         int[]a={2,3,4}; 6         int[]b=a; 7         System.out.print(a[0]+" "); 8         System.out.println(b[0]); 9         b[0]=0;10         System.out.print(a[0]+" ");11         System.out.println(b[0]);12     }13 }

 

output:

2 2
0 0

代码分析,行6把a赋值给b,代表a和b指向同一对象。所以当b[0]改变时,a[0]也随之改变。

示例2 基本类型数组克隆赋值

 1 public class Topcoder 2 { 3     public static void  main(String[] args) 4     { 5         int[]a={2,3,4}; 6         int[]b=a.clone(); 7         System.out.print(a[0]+" "); 8         System.out.println(b[0]); 9         b[0]=0;10         System.out.print(a[0]+" ");11         System.out.println(b[0]);12     }13 }

代码分析,行6把a的克隆赋值给b,现在有两份数组副本,a指向原本的第一份,b指向第二份。所以当b[0]改变时,a[0]不受其影响。

output为:

2 2
2 0

示例3 引用类型数组赋值

 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[3];10         a[0]=new Number();11         a[0].num=2;12         Number[]b=a;13         System.out.print(a[0].num+" ");14         System.out.println(b[0].num);15         b[0].num=0;16         System.out.print(a[0].num+" ");17         System.out.println(b[0].num);18     }19 }

output为:

2 2
0 0

分析如示例1

示例4 引用类型数组克隆赋值

 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[3];10         a[0]=new Number();11         a[0].num=2;12         Number[]b=a.clone();13         System.out.print(a[0].num+" ");14         System.out.println(b[0].num);15         b[0].num=0;16         System.out.print(a[0].num+" ");17         System.out.println(b[0].num);18     }19 }

output为:

2 2
0 0

示例4 a的clone赋值给b,a和b指向了不同的数组副本。但是里面的对象的引用是相同的,即a[0]和b[0]是指向同一对象的。只不过储存a[0],b[0]的位置是不同的。

 

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