Java指針詳解___案例解答

大家先看看下面的這個程序:---------》相信初級程序員就能看得懂

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指針指向的內容。


看到這裏,如果還看不懂。。。老衲表示壓力很大,找菩薩吧,老衲不能度你過苦海。。。(樂一樂大家!沒有別的意思。哈哈)

-----------------------------------------------------苦難不是博得同情的資本,只有不斷奮鬥才能改變命運!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章