java数组下(基础系列5)

今天来更深入的了解数组。
声明一个数组只是得到一个存放数组地址的变量,对数组的操作是通过地址引用来实现的。

比如说,声明一个整型的数组a:int[ ] a,引用该数组的引用变量a会被存储在栈内存中

这里写图片描述

栈中存储的都是局部变量,只要是数据运算完成所在的区域,该数据就会被释放掉,栈的特点是先进的后出去,除此之外,栈中的数据可以共享。
堆用于存放数组和对象,相当于实体(封装多个数据的),new出来的东西都放在了dui堆内存中。

当对数组进行初始化以后,int[ ] a={1,2,3,4,5};这时候堆内存中就不再是null

可以看出,java数组变量是一种引用类型的变量,数组变量并不是数组本身,它只是指向堆内存中的数组对象。

如果说我们在定义一个数组b:int[ ] b;b=a;那么内存中就会按下面的方式进行存储:

当修改了a数组其中的一个元素值时,b里面的也会相应改变

int[] a = { 1, 2, 3, 4, 5 };   
int[] b;
b = a;
System.out.println(b[3]);//4
a[3] = 10;
System.out.println(b[3]);//10

这是因为数组a对应的地址空间有两个引用,一个是a本身,另一个是b(因为b也指向该地址)。改变a[3]的值,由于b[3]所对应的地址与a[3]相同,所以b[3]的值也就是a[3]的值,因此改变后两个值相同,同样,如果改变b[3]的值,a[3]的值也会跟着改变。

上面的语句中,a和b指向同一地址,改变其中一个的元素值,另一个都会随之改变,但是,有时候的编程我们并不希望这样,要想两个不影响,就要用到数组的复制。

下面讲一下数组的复制,数组的复制使用下面这种方式:

System类下面的一个方法arraycopy(),
public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
System.arraycopy(源数组,源数组起始位置,目标数组,目标数组起始位置,长度)

int[] a = { 1, 2, 3, 4, 5 };
int[] b = new int[5];
System.arraycopy(a, 0, b, 0, 5);
for (int i : b) {
System.out.println(i);//1 2 3 4 5
}
a[3] = 10;
System.out.println(b[3]);//4

a的值改变,b的值并没有改变。

数组这部分内容就到这里,更多的需要自己敲代码,进行熟悉和理解,世界上不都是天才,更多的是靠自己的努力与坚持。

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_41177827/article/details/81429688
今日推荐