java小程序中数组赋值问题

public class example2
{
public static void main(String args[])
{
int a[]={1,2,3,4};
int b[];
System.out.println(a[3]);
b=a;
b[3]=100;
System.out.println(a[3]);
System.out.println(b[3]);

}

}
新手。。。输出结果为4.100.100。想问一下为何a数组也变了。

数组是引用类型变量,int a[] ={1,2,3,4};中值{1,2,3,4}是存放在堆内存中,而变量是在栈内存中,
当b=a赋值是使b指向到堆内存中的值,所以在给b数组修改变量时是将堆内存中的值改变了,
同时a数组也是指向同一个堆内存的地址上的值,所以a输出出来也是改变过得。

因为b=a是让b指向了a,而不是复制了一个数组

数组的复制方法现在至少有四个思路:

  1 使用循环结构 这种方法最灵活。唯一不足的地方可能就是代码较多

  2 使用Object类的clone()方法, 这种方法最简单,得到原数组的一个副本。灵活形也最差。效率最差,尤其是在数组元素很大或者复制对象数组时。

  3 使用Systems的arraycopy这种方法被告之速度最快,并且灵活性也较好,可以指定原数组名称、以及元素的开始位置、复制的元素的个数,目标数组名称、目标数组的位置。

  4 Arrarys类的copyOf()方法与copyOfRange()方法可实现对数组的复制

http://jingyan.baidu.com/article/e4d08ffddbb7610fd2f60d90.html
自己看

int a[]={1,2,3,4};//只是让a指向了数组{1,2,3,4};
b=a//让b也指向了数组{1,2,3,4};
a和b的值都只是数组{1,2,3,4}的引用。所以因为指向了同一个数组对象,数组变了,a,b的值也都跟着变了。

建议去看下java运行时堆和栈及常量区这些基础的概念,应该能对这个问题有更清晰的了解

引用数据类型 你这里的b[]的内存地址跟a[]一样的 所以你改变b[] a[]也就变了