int a[]={1,2,3};
int b[]={7,8,9};
b=a;
b[0]=5;
运行后a[0]的值是多少?
按照课本的讲解java数组是可以整体赋值的,但是从结果看来好像和c语言一样,只是数组名指针b指向了数组a, 两个数组名共享一个数组空间。那么java数组的整体赋值到底是什么意思?

解决方案 »

  1.   

    int a[]={1,2,3};在内存中开辟了堆空间,并且a指向这个空间
    int b[]={7,8,9};在内存中开辟了堆空间,并且b指向这个空间b=a;引用变量a指向了b指向的空间,即a和b指向同一个空间;
      

  2.   

    java中数组类型是引用类型。
    也就是说a,b是引用变量,它们存放的是引用值。当b=a以后,两个引用变量都指向了同一个数组对象,即new int[3]{1,2,3}。
    而new int[3]{7,8,9}没有再被变量引用,即变成了“垃圾”,在以后会被GC(垃圾收集机制)自动回收。
    然后b[0]=5;
    这时原来的{1,2,3}变成了{5,2,3},所以a[0]输出为5,因为这时b[0]就是a[0]。