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

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

Java中的引用類型是按引用還是按值分配?

Java中的引用類型是按引用還是按值分配?

幕布斯6054654 2023-08-16 09:58:15
據我所知,在Java中引用類型是按值分配的,但我無法理解為什么下面的代碼會執行它的操作。考慮以下代碼:Integer num = new Integer(11);List<Integer> arr = new ArrayList<>();arr.add(num);List arr2 = arr;arr = null;System.out.println(arr2);我們創建一個包含一個元素的 ArrayList,然后創建第二個列表并將其分配給第一個列表。據我了解,第二個列表僅指向與第一個列表相同的內存位置,因此我對第一個列表所做的任何更改都將應用于第二個列表。如果我將第一個列表設置為空,那么第二個列表也應該變為空。為什么控制臺仍然記錄 11 而不是 null?
查看完整描述

2 回答

?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

這就是后臺發生的事情。我會嘗試將其形象化,以便于理解。


創建整數對象:


Integer num = new Integer(11);

num --> @num493857 (some reference not real of course)

@num493857 --> ------

               | 11 |

               ------

創建數組列表:


List<Integer> arr = new ArrayList<>();

arr --> @arr7686

@arr7686 --> [] (empty list)

將 num 添加到 Arraylist:


arr.add(num);

arr --> @arr7686 --> [@num493857] // @num493857 has 11 in it

                         ^

                         |

                        num

設置 arr2 = arr:


List arr2 = arr;

arr --> @arr7686 --> [@num493857]

           ^             ^

           |             |

          arr2          num

設置 arr = null:


arr = null

arr --> null

        @arr7686 --> [@num493857]

           ^             ^

           |             |

          arr2          num

打印arr2:


System.out.println(arr2);

This prints whatever is in the list that is 11.


查看完整回答
反對 回復 2023-08-16
?
LEATH

TA貢獻1936條經驗 獲得超7個贊

如果您將 Java 變量與C 中的引用而不是指針進行比較,就會更容易理解。



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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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