1.有趣的问题
我们知道,在java中实例化一个数组可以使用如下:
int [] arr = {1,2,3,4}; 这也相当于new了一个数组,在这种情况下,存储空间的分配将由编译器来负责。
我们假定以下场景:
结果输出如下:
我们明明改变的是b数组的值,为什么a数组的值也随之改变了。
思路
因为在赋值的时候,b=a;仅仅是将引用复制,也就是说,b现在指向的地址是原来a指向的地址,他俩现在指向的是同一个地址,所以当改变一个的值,另一个也会随之改变。
2.关于初始化
①
当你初始化的对象数组里面放的是基本类型的数据时,那么,你可以在定义的同时进行初始化:
而当你初始化的对象数组里面放的是引用类型比如Integer时,你定义之后其实初始化还没有完成
即便是你已经用了new关键字来创建数组,他还只是一个引用数组,一直到创建新的Integer对象,初始化才算是结束。
ps:这里使用了自动装箱。
如果忘记了创建对象,并且试图使用数组中的空引用,就会在运行时产生异常。
②另一种初始化方式
在两种形式中,第一种只能用于数组被定义之处。而第二种则可以应用在任何地方,甚至是方法调用的内部。
如图所示在其他main方法内部使用动态初始化。