亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 varargs 時是否會創建一個新數組?

使用 varargs 時是否會創建一個新數組?

牧羊人nacy 2023-07-19 15:45:24
考慮下面的類:class Collection {    private Object[] terms;    public Collection(Object... terms) {        this.terms = terms;    }    // Do something with terms...}我試圖用這個類來保持不變性,并且我想更多地了解 varargs 及其功能。當我使用參數時:Collection c = new Collection(1, 2, 3, 4);我假設在上面的實例中創建了一個新數組。但是,如果我要執行類似以下代碼的操作:Object[] arr = {1, 2, 3, 4};Collection c = new Collection(arr);由于使用了可變參數,在上述實例中是否隱式創建了一個新數組,或者該數組只是通過引用傳遞,就像類型參數用于Object[]?
查看完整描述

2 回答

?
手掌心

TA貢獻1942條經驗 獲得超3個贊

我會說不,因為以下原因。使用原始數組。不會創建新的。


   public static void main(String[] args) {

      int[] v = { 1, 2, 3, 4

      };

      System.out.println(System.identityHashCode(v));

      test(v);

      System.out.println(Arrays.toString(v));

   }


   public static void test(int... vals) {

      System.out.println(System.identityHashCode(vals));

      vals[2] = 1000;

   }

打印出來


2085857771

2085857771

[1, 2, 1000, 4]


查看完整回答
反對 回復 2023-07-19
?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

當我解釋JLS時,如果您傳遞一個數組作為參數,則不會創建新數組。WJS 的示例還表明,在這種情況下它保持相同的數組,因為在 vararg 函數中所做的更改在執行后仍然可見。



查看完整回答
反對 回復 2023-07-19
  • 2 回答
  • 0 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號