标签:style blog color java ar div 代码 sp log
在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]的位置是不同的。
标签:style blog color java ar div 代码 sp log
原文地址:http://www.cnblogs.com/AlexWei/p/3957156.html