原文首发于微信公众号: jzman-blog, 欢迎关注交流!
本来打算温习一下注解方面的内容作为今天的推送, 但是来不及写了, 那就一起来看一下数组, 数组是用来存放一组具有相同类型数据的数据结构, 通过下标来访问数组中的元素.
数组的定义
数组的定义主要有两种, 一种是先指定数组的大小, 然后根据数组元素下标进行赋值, 另一种是直接创建一个数组并进行赋值, 具体如下:
- //1. 定义大小为 10 的数组
- int[] arrayA = new int[10];
- int arrayB[] = new int[10];
- arrayA[0] = 1;
- arrayB[1] = 2;
- //2. 定义数组并赋值
- int[] arrayC = {
- 1,2,3,4,5
- };
数组本质
Java 中的数组实际上是一个类, 因此两个数组变量可以指向同一个数组, 观察如下代码:
- int[] arrayD = {
- 1,1,1
- };
- int[] arrayE = arrayD;
- arrayD[0] = 2;
- System.out.println(arrayE[0]);
显然, 执行上述代码结果肯定是 2, 上述代码中, 将数组 arrayD 的值指向 arrayE, 其本质是两个数组 arrayD,arrayE 指向了同一块数组空间, 当修改了 arrayD 中某一元素的值, 相应的 arrayE 中对应元素值也发生了变化, 具体如下图所示:
注意: 当数组作为方法的参数传递时, 相当于传递的是数组的引用, 因此在方法中对数组的操作也会影响到原来的数组, 这一点非常重要.
数组的复制
为了得到两个数组元素的每个值都相同的元素, 我们可以使用 Java 提供的 arraycopy() 来实现, 具体如下:
- int[] arrayD = {
- 1,1,1
- };
- int[] arrayF = new int[3];
/ 复制数组
- System.arraycopy(arrayD, 0, arrayF, 0, 3);
- System.out.println(Arrays.toString(arrayF));
显然, 上述代码执行完数组 arrayF 的值为 1,1,1, 如果间接修改了数组 arrayD 中数组元素的值, 则完数组 arrayF 的值为 2,1,1, 这是结合上下文获得的结果.
下面顺便说一下 arraycopy 方法参数的含义, 具体如下:
- /**
- * 复制数组
- * @param src: 原数组
- * @param srcPos: 原数组开始被复制的位置
- * @param dest: 目标数组
- * @param destPos: 目标数组开始的位置
- * @param length: 目标数组的长度
- */
- public static void arraycopy?(Object src,
- int srcPos,
- Object dest,
- int destPos,
- int length) {
- }
数组中好像要注意的东西也就这么多了, 当然还有其他关于操作数组的 API , 上面遇到数组之间的赋值影响了原来数组的值, 这也是之前自己没有注意到的, 今天就写这么多.
来源: http://www.bubuko.com/infodetail-3327452.html