大家先看看下面的這個程序:---------》相信初級程序員就能看得懂
int k1=1;
int k2=k1;
k2+=8;
System.out.println("k1:"+k1);
大聲回答,k1等於幾?
輸出:
k1:1
這是爲什麼呢?不是明明k2已經指向了k1,然後k2的值發生改變,k1就要發生改變嗎?
剛開始:k1 ,k2指向同一個內存地址:
當發生語句:k2+=8的時候,我們這麼看:k2=k2+8,第一步:k2+8,很簡單啊,等於9唄,這時候,內存空間會自動分配一個新的內存給你儲存!注意咯,k2這時候還是指向1!因爲還沒有進入第二步!
第二步來了:k2=9!這時候才發生k2指針指向9所在的內存地址!
可以看到k1像個忠誠的騎士,一直守“1”!所以咱們在System.out.print("k1:"+k1),的時候,輸出是1!
同樣的道理,你們可以去試試其他基礎類型。
看到這裏,你可能覺得這個很容易啊,我以後肯定都會了。
那,下面我們來加深一點點難度:
廢話不多說,先上一個類:----------------》》初級程序員都看得懂
class User {
int id;
String name;
public User(int id, String name) {
super();
this.id = id;
this.name = name;
}
}
so Easy!XX在也不用擔心我的學習。
別高興的太早,
User u1=new User(1, "u1_Name");
User u2=u1;
u2.name="u2_Name";
System.out.println("u1.name: "+u1.name);
大聲回答自己,u1.name 是多少?
輸出:u1.name: u2.Name
什麼??居然是u2?難道是瞎了狗眼?不,你沒看錯,這確實是u2。這到底是爲什麼呢 ?其實是因爲u1.name 和 u2.name 中的name 是同一個指針!什麼意思?我們看圖說話。
第一步:User u1=new User(1,"u1_Name");
第二部:u2=u1,發生了什麼故事?
看到了嗎?原來是將u2中的name、id指針指向u1中的name、id指針!!!看到這裏!應該明白了,你修改了u2.name指針指向的內容,其實就相當於修改了u1.name指針指向的內容。
看到這裏,如果還看不懂。。。老衲表示壓力很大,找菩薩吧,老衲不能度你過苦海。。。(樂一樂大家!沒有別的意思。哈哈)
-----------------------------------------------------苦難不是博得同情的資本,只有不斷奮鬥才能改變命運!