public class ArrayCopyDemo { /** * 数组的复制不动态扩展算法 */ public static void main(String[] args) { int[] ary1 = new int[] { 1, 2, 3, 4 }; // 数组的复制 int[] ary2 = ary1;// 一个数组对象,两个引用同时引用 // 相当于两个名词(数组变量ary1和ary2)同时指代一个事物,数组对象。 System.out.println(ary1[1]); System.out.println(ary2[1]); ary2[2] = 9; /* 这种现象叫数组赋值,可以发现如果这样赋值,数组对象没有隔离性,丌小心就修改了 */ System.out.println(ary1[2]); }}
我们使用数组对象的复制来实现数组的隔离性。
import java.util.Arrays;public class ArrayCopyDemo1 { /** * 新数组ary3是数组ary1的副本,ary3是新数组 ary1和ary3分别指向丌同对象,内存示意图如下所示: */ public static void main(String[] args) { int[] ary1 = new int[] { 1, 2, 3, 4 }; int[] ary3 = new int[ary1.length];// 空数组 for (int i = 0; i < ary1.length; i++) { ary3[i] = ary1[i];// 将每个元素赋值一遍 } ary3[0] = 99; System.out.println(Arrays.toString(ary1)); System.out.println(Arrays.toString(ary3)); }}
内存图如下:
数组的扩展问题:
先明确一点,Java数组对象的大小是固定的,数组对象是丌能扩展的,我们利用数组复制的方法可以变通的实现数组扩展。创建数组副本的同时将数组长度增加就变通的实现了,数组的扩展。 System.arraycopy() 可以复制数组 Arrays.copyOf() 可以简便的创建数组副本。
Java提供的数组复制的方法
import java.util.Arrays;public class Test { /** * Java提供的数组复制的方法 */ public static void main(String[] args) { char[] cArr = { '北', '京' }; char[] temp = Arrays.copyOf(cArr, 4);// 新数组长度为4,后两位自动赋值0 char[] cArr2 = temp; cArr2[2] = '帅'; cArr2[3] = '哥'; System.out.println(cArr2); //如果想看数组元素内容,以后统一使用Arrays.toString(arr)形式输出即可 }}