這老頭壞的很_2019
2016-05-03 18:40:08
先上兩個例子例子1:public?class?IntegerArray{
????public?static?void?main(String[]?args){
????????Integer[]?scores1?=?new?Integer[]{1,2,3,4,5};
????????Integer[]?scores2?=?new?Integer[scores1.length];
????????for(int?i?=?0;?i?<?scores1.length;?i++){
????????????scores2[i]?=?scores1[i];
????????}
????????for(Integer?score2:?scores2){
????????System.out.print(score2);
????????}
????????System.out.println();
????????scores2[0]?=?7;
????????for(Integer?score1?:?scores1){
????????????System.out.print(score1);
????????}
????????System.out.println();
????????for(Integer?score2:?scores2){
????????????System.out.print(score2);
????????????}
????}
}
--------------------------------------------------------
運行結(jié)果:
12345
12345
72345
--------------------------------------------------------
例子2:
public?class?ClassArray?{
????public?static?void?main(String[]?args){
????????Clothes[]?c1?=?{new?Clothes("red",?'L'),?new?Clothes("blue",?'M')};
????????Clothes[]?c2?=?new?Clothes[c1.length];
????????for(int?i?=?0;?i?<?c1.length;?i++){
????????????c2[i]?=?c1[i];
????????}
????????for(Clothes?c?:?c2){
????????????System.out.print(c.color?+?"--"?+?c.size?+"?");
????????}
????????c2[0].color?=?"black";
????????System.out.println();
????????for(Clothes?c?:?c1){
????????????System.out.print(c.color?+?"--"?+?c.size?+?"?");
????????}
????????System.out.println();
????????for(Clothes?c?:?c2){
????????????System.out.print(c.color?+?"--"?+?c.size?+"?");
????????}
????}
}
----------------------------------------------------------------------
運行結(jié)果:
red--L?blue--M?
black--L?blue--M?
black--L?blue--M?
----------------------------------------------------------------------
疑問:同樣是類類型數(shù)組,為什么運行的結(jié)果不同,一個是2個數(shù)組變量分別指向2個不同的數(shù)組對象,
另一個則是2個數(shù)組變量指向同一個數(shù)組對象;難道就是因為Integer這個類比較特殊?希望知道的人幫忙解答一下。。。
4 回答

Corbie亞東
TA貢獻53條經(jīng)驗 獲得超25個贊
Integer時候他們傳的是個值? 而到自定義時候他們傳的是一個個對象???? 當你去修改 自定義對象時會去堆中修改指定地址的對象值???? c2[i] = c1[i];?? 給的是指定的對象地址????? 貌似是這樣的??? 你再去查查資料

慕工程5894045
TA貢獻2條經(jīng)驗 獲得超0個贊
補充我回答的,Integer之所以不能改變是因為源碼上的值是final修飾的,追溯進去看下,所以造成了Integer的值不能更改后隨之變化。

慕工程5894045
TA貢獻2條經(jīng)驗 獲得超0個贊
樓上說的很對自定義對象傳的是對象的引用的副本,但是指向的是同一個對象,所以改變指向的內(nèi)容的話,就會改變你指定對象的值,你最初的對象的引用是不會變化的,但是這里Integer為什么當成基本數(shù)據(jù)類型處理,而不是也當成對象的引用,這點我還不是很明白。

這老頭壞的很_2019
TA貢獻1條經(jīng)驗 獲得超0個贊
例子2里的類是自己定義的,代碼如下:
class Clothes{
?? ?String color;
?? ?char size;
?? ?Clothes(String color, char size){
?? ??? ?this.color = color;
?? ??? ?this.size = size;
?? ?}
}
添加回答
舉報
0/150
提交
取消