程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> java基礎-java.util.ArrayList類

java基礎-java.util.ArrayList類

編輯:編程解疑
java.util.ArrayList類

初學java,請問為什麼將ArrayList對象get方法的返回值賦給一個引用,操作這個引用不會影響ArrayList對象內對應元素呢?
List list = new ArrayList();
list.add("abc");
String stri = list.get(0);
stri += "def";
System.out.println(stri);
System.out.println(list);
輸出結果為:
abcdef
[abc]
但是我看到的ArrayList的get方法就是在判斷index是否超范圍之後直接return (E) elementData[index];為什麼對引用stri的操作不會改變list的元素呢?
剛開始學java,很多東西沒弄清楚,求前輩指點一下.m(__)m

最佳回答:


主要是String類型的數據其實是不可變的,
stri += "def";
分解成
stri = stri + "def"即 stri = "abc" + "def"
這步操作,你要這樣理解:
假定開始的時候內存中一塊空間A存放“abc”,並且名字是stri
可以表示為: stri -> A("abc")
而對於String類型來說,他已經分配的內存是不能改動的,也就是不會在A空間的“abc”後面追加內容,所以做加法操作的時候,會重新分配一塊內存B來存放計算結果,
也就是B("abcdef")
並將內存B地址賦值給stri,
顯然,stri所引用的內存地址都變了,stri已經不是原先list裡面的那個了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved