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
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章