目录
(2)通过函数System.arraycopy()进行拷贝:
null 在 Java 中表示 "空引用" , 也就是一个不指向对象的引用。

2.数组的应用

参数传类型(引用数据类型)


总结:当数组作为参数进行传递的时候,其实还是按值传递的,只不过传递的值是一个地址。那么会出现两种情况:
1.形参改变指向:array = new int[10];只会影响形参的指向。
2.形参修改指向对象的值:array[0] = 9;此时才会影响实参。


- public static String myToString(int[] array) {
- if (array == null) {
- return "null";
- }
- String ret = "[";
- for (int i = 0; i < array.length; i++) {
- ret += array[i];
- if (i != array.length - 1) {
- ret += ", ";
- }
- }
- ret = ret + "]";
- return ret;
- }
- public static void main(String[] args) {
- int[] array = {1,2,3,4};
- System.out.println(myToString(array));
- }
![]()
- //数组拷贝
- public static void main(String[] args) {
- int[] array = {1,2,3,4};
- int[] array2 = new int[array.length];
- for (int i = 0; i < array.length; i++) {
- array2[i] = array[i];
- }
- System.out.println(Arrays.toString(array));
- System.out.println(Arrays.toString(array2));
- }

- public static void main(String[] args) {
- int[] array = {1,2,3,4};
- //可以当作扩容
- int[] ret = Arrays.copyOf(array, array.length);
- System.out.println(Arrays.toString(array));
- System.out.println(Arrays.toString(ret));
- int[] ret2 = Arrays.copyOf(array, array.length*2);
- System.out.println("--------------------");
- System.out.println(Arrays.toString(ret2));
- }


- public static void main(String[] args) {
- int[] array = {1,2,3,4};
- int[] copy = new int[array.length];
- System.arraycopy(array, 0, copy, 0, array.length);
- System.out.println(Arrays.toString(array));
- System.out.println(Arrays.toString(copy));
- int[] copy2 = new int[array.length];
- System.arraycopy(array, 1, copy2, 1, array.length-1);
- //从array数组下标为1的元素开始拷,只能拷3个,所以长度-1
- System.out.println(Arrays.toString(copy2));
- }

- import java.util.Arrays;
- public static void func(){
- // newArr和arr引用的是同一个数组
- // 因此newArr修改空间中内容之后,arr也可以看到修改的结果
- int[] arr = {1,2,3,4,5,6};
- int[] newArr = arr;
- newArr[0] = 10;
- System.out.println("newArr: " + Arrays.toString(arr));
- // 使用Arrays中copyOf方法完成数组的拷贝:
- // copyOf方法在进行数组拷贝时,创建了一个新的数组
- // arr和newArr引用的不是同一个数组
- arr[0] = 1;
- newArr = Arrays.copyOf(arr, arr.length);
- System.out.println("newArr: " + Arrays.toString(newArr));
- // 因为arr修改其引用数组中内容时,对newArr没有任何影响
- arr[0] = 10;
- System.out.println("arr: " + Arrays.toString(arr));
- System.out.println("newArr: " + Arrays.toString(newArr));
- // 拷贝某个范围.
- int[] newArr2 = Arrays.copyOfRange(arr, 2, 4);
- System.out.println("newArr2: " + Arrays.toString(newArr2));
- }
- public static void main(String[] args) {
- int[] array = {1,2,3,4,5};
- int[] ret = Arrays.copyOfRange(array, 1, 3);//[1,3)
- System.out.println(Arrays.toString(array));
- System.out.println(Arrays.toString(ret));
- }

- public static void main(String[] args) {
- int[] array1 = {1,2,3,4,5};
- int[] array2 = {1,2,3,4,5};
- System.out.println(Arrays.equals(array1,array2));
- }
![]()
- public static void main(String[] args) {
- int[] array = new int[10];
- Arrays.fill(array, 3);
- System.out.println(Arrays.toString(array));
- }

局部赋值:
- public static void main(String[] args) {
- int[] array = new int[10];
- Arrays.fill(array, 3);
- System.out.println(Arrays.toString(array));
- //局部赋值——将4~7的位置赋值为9
- Arrays.fill(array, 3, 7, 9);//[3,7)
- System.out.println(Arrays.toString(array));
- }

(6)数组名.clone()——>产生一个副本
- public static void main(String[] args) {
- int[] array1 = {1,2,3,4,5};
- int[] array2 = array1.clone();
- System.out.println(Arrays.toString(array1));
- System.out.println(Arrays.toString(array2));
- System.out.println("-----------------------");
- array2[0] = 100;
- System.out.println(Arrays.toString(array1));
- System.out.println(Arrays.toString(array2));
- }


- public static int find(int[] array, int val) {
- for (int i = 0; i < array.length; i++) {
- if (array[i] == val) {
- return i;
- }
- }
- return -1;
- }
- public static void main(String[] args) {
- int[] array = {1,2,3,4,5};
- int ret = find(array, 2);//这个方法效率极低
- System.out.println(ret);//1(下标为1)
- }