//JDK1.6下运行;
public class Text {
public static void main(String[] args) {
int a[];
a=new int[6];
a[0]=1;
a[1]=2;
a[2]=3;
a[3]=4;
a[4]=5;
a[5]=6;
int b[]={2,4,5,7};
a=b;
System.out.println(a.length);//4
for(int i=0;i<a.length;i++) {
System.out.println(a[i]);//2 4 5 7
}
}
}
如上述已声明数组a的长度,为何下面程序还可以修改它的长度,是不是JDK1.6和以前的版本有所不同???

解决方案 »

  1.   

    a原来指向数组{1,2,3,4,5,6}
    a=b;之后a指向了b指向的数组{2,4,5,7}
    所以a的长度就变了
    这是正常的,跟版本没关系
      

  2.   

    晕,引用只是一个名字,比如一个男的叫张三,之后这个男的觉得这个名字太土,就不要了,给了一个女孩,这个女孩又叫张三了,但你能说现在的张三是一个男孩吗
    你把引用B引用的地址给了A,后面的A代表的都是原来B引用的数组,而不是改变了原来A所引用的数组,其实此时原来A引用的数组已经被gc了
      

  3.   

    如上述已声明数组a的长度,为何下面程序还可以修改它的长度,是不是JDK1.6和以前的版本有所不同???
    在java中数组的长度是可以更改的
    比如:
     int a[] =new int[3];
            a[0]=1;
            a[1]=2;
            a[2]=3;
            a =new int[5];
    这样是可以的
      

  4.   


    做做这题,看看是否真的懂了
    public static void main(String[] args) throws Exception{
    int[] src = new int[5];
    int num = 0;
    for(int i : src) {
    i = num++;
    }
    for(int i : src) {
    System.out.println(i);
    }
    }