ArrayList和Integer都是對象數據類型,但爲什麼下面的代碼將這兩種方式區別對待? ar,br,a和b都是對象。 改變br改變br,但改變a沒有改變b爲什麼?是不是ArrayLists和Integers都是對象?通過使用=語句將對象分配給另一個對象只需執行淺拷貝FOR BOTH?或沒有?是什麼導致java以不同的方式處理ArrayLists和Integer這兩種對象類型?
import java.util.ArrayList;
import java.util.Arrays;
public class MyClass {
public static void main(String[] args) {
ArrayList <Integer> ar = new ArrayList<>(Arrays.asList(1,2,3));
ArrayList<Integer> br = ar;
System.out.println(Arrays.toString(br.toArray()));// [1,2,3]
ar.remove(0);// lets change ar
// now lets see if br changed too
System.out.println(Arrays.toString(br.toArray()));// [2,3] (yes did)
Integer a= new Integer (5);
Integer b = a;
a = a+1;// lets change a and see if b changed too
System.out.println(b);// b is still 5
//So changing ar changed br too, but changing a did not change b why? Ist it both br and b are objects?
}
}
線索是你寫了'a = ...'。 '='做什麼? – 2014-09-12 22:36:40
這裏是一個閱讀所有聰明的人downvoted我的答案的主題:http://stackoverflow.com/questions/3131136/integers-caching-in-java – Lucas 2014-09-12 22:39:02
@Lucas:你的答案是downvoted,因爲它是不正確的。值確實被緩存了,但這與這裏觀察到的行爲沒有關係。 – 2014-09-12 22:39:50