Java面试宝典-数组

1.数组的使用和本质

public static void main(String[] args) {
        /** * 数组的使用 */
        int[] arr = new int[]{1,2,3};
        String[] ss = new String[3];

        for(int i:arr){
            System.out.print(i+" ");
        }
        System.out.println();
        for(String s:ss){
            System.out.print(s+" ");
        }
        System.out.println();
        /** * 数组的本质: * 本质上是类,对于基本数据类型,未初始化的会被初始化为0 * 对于引用类型会被初始化为null */
        System.out.println("整型数组的类名:"+arr.getClass().getName());
        System.out.println("String数组的类名:"+ss.getClass().getName());
    }

2.引用类型的数组

比如:Object[] objs = new Object[5];是否创建了5个对象?
答案肯定是否定的,这样只创建了一个数组实例,数组的每个元素都是null值,只有初始化了每个对象才有对象。比如像下面这样:

Object[] objs = new Object[]{new String("aa"),new String("bbh")};

3.怎么复制数组

很多人会直接复制,像下面第一个这样,这样只复制了引用,操作的是同一块内存地址,正确的做法,我们可以用System.arraycopy函数,也可以自己写一个:

public static void main(String[] args) {
        int[] a1 = new int[]{1,2,3};

        //复制数组的引用
        int[] a2 = a1;
        a2[1] = 8;//操作的还是同一块内存区域

        for(int i:a1){
            System.out.print(i+" ");
        }
        System.out.println();

        //复制数组的值
        int[] a3 = new int[3];
        System.arraycopy(a1, 0, a3, 0, a1.length);
        a3[1] = 6;
        for(int i:a1){
            System.out.print(i +" ");
        }
    }

4.二维数组的长度固定吗

不固定,指定了第一维长度后,第二维可以任意,看下面代码:

public static void main(String[] args) {
        //二维数组的第二维长度可以任意,可以动态改变
        int[][]arr = new int[3][];
        arr[0] = new int[]{1};
        arr[1] = new int[]{2,3};
        arr[2] = new int[]{4,5,6};

        for(int[]a:arr){
            for(int i:a){
                System.out.print(i+" ");
            }
            System.out.println();
        }
    }

你可能感兴趣的:(java,面试,数组)