3.10.3(10) 数组拷贝

一、 概述

  在java中允许将一个数组变量拷贝给另外的一个数组,这时,两个变量将引用同一个数组。但是java中数组的长度是固定的,当我们需要改变数组的长度的时候就可以使用Arrays的copyOf方法了。

二、问题

  但是在实际中如果我们仅仅是将两个变量指向同一个地址而已,因为这样做没有任何的意义,直接新建一个变量并进行赋值就可以,如下:

    /**
     * Description :测试同一个数组使用连个变量
     * @param
     * @return
     * @exception
     * @author     :loulan
     * */
    @Test
    public void arrayTowV () {
        String[] strs = {"1", "2", "3", "4", "5"};
        String[] strs1 = strs;
        System.out.println(ArrayUtil.arrayToString(strs));                // 1 2 3 4 5
        System.out.println(ArrayUtil.arrayToString(strs1));               // 1 2 3 4 5
        System.out.println("strs是否和strs1相同: " + strs.equals(strs1)); // true
    }

三、意义

  我们都知道,数组的长度一旦确定了就无法进行改变,而且运行程序中数组的长度必须是固定的,不是可变的(这就是为什么要使用集合了)。所以我们可以使用Arrays类的copyOf功能,这样可以新建一个数组,并且重新设置长度,如下:

    /**
     * Description :进行数组拷贝的测试
     * @param
     * @return
     * @exception
     * @author     :loulan
     * */
    @Test
    public void arrayCopy () {
        String[] strs = {"1", "2", "3", "4", "5"};
        String[] strs1 = Arrays.copyOf(strs, 7);
        strs1[5] = "6";
        strs1[6] = "7";
        System.out.println(ArrayUtil.arrayToString(strs));               // 1 2 3 4 5
        System.out.println(ArrayUtil.arrayToString(strs1));              // 1 2 3 4 5 6 7 
        System.out.println("strs是否和strs1相同: " + strs.equals(strs1)); // false
    }

  当然我们也可以直接赋值给原来的变量,也就是说改变原来变量所指向数组的地址,这样也是可以改变数组的长度的。如下:

    /**
     * Description :进行数组拷贝并改变原来数组的长度(其实没有改变,改变的是原来变量所指向的数组)
     * @param
     * @return
     * @exception
     * @author     :loulan
     * */
    @Test
    public void arrayCopy2 () {
        String[] strs = {"1", "2", "3", "4", "5"};
        System.out.println(strs);                                      // [Ljava.lang.String;@1d8d30f7
        System.out.println(ArrayUtil.arrayToString(strs));             // 1 2 3 4 5
        strs = Arrays.copyOf(strs, 7);
        strs[5] = "6";
        strs[6] = "7";
        System.out.println(strs);                                      // [Ljava.lang.String;@6b57696f
        System.out.println(ArrayUtil.arrayToString(strs));             // 1 2 3 4 5 6 7
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章