亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java編程,函數內變量傳遞問題,為什么沒有都改變呢?

java編程,函數內變量傳遞問題,為什么沒有都改變呢?

嗶嗶one 2019-02-17 13:16:04
代碼如下: public void test(BSTNode<T> z) { BSTNode<T> y; if (z.left != null){ y = z.parent; BSTNode<T> a; a = y.left; if (y != null){ System.out.println("before a "+a); System.out.println("before y.left "+y.left); System.out.println("befere z.parent.left "+z.parent.left); y.left = null; //a = null; System.out.println("after a "+a); System.out.println("after y.left "+y.left); System.out.println("after z.parent.left "+z.parent.left); } } } 打印結果如下:before a threadSleep.BSTree$BSTNode@15db9742before y.left threadSleep.BSTree$BSTNode@15db9742befere z.parent.left threadSleep.BSTree$BSTNode@15db9742after a threadSleep.BSTree$BSTNode@15db9742after y.left nullafter z.parent.left null 請問 “after a ”為什么不是null? 或者將代碼: y.left = null; //a = null; 改為 //y.left = null; a = null; 結果為: before a threadSleep.BSTree$BSTNode@15db9742 before y.left threadSleep.BSTree$BSTNode@15db9742 befere z.parent.left threadSleep.BSTree$BSTNode@15db9742 after a threadSleep.BSTree$BSTNode@15db9742 after y.left null after z.parent.left null 運行環境: jdk1.8
查看完整描述

3 回答

?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

你的結果兩次肯定不一樣。其實就和下面這種是一樣的。


int x = 10;
int y = x;
y = 0;
x ?
查看完整回答
反對 回復 2019-03-01
?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

Java中所說的按引用傳遞實質上是傳遞該對象的地址,該地址其實是按值傳遞的,通過這個地址可以修改其指向內存處對象的值。改變該地址的值毫無意義,只會失去對真實對象的掌控。

查看完整回答
反對 回復 2019-03-01
?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

我來我來

很簡單,你只要理解,引用傳遞傳遞的是一個地址,這個地址傳過去之后會放在被調用方法的本地變量變中,兩個方法就有兩個棧幀,每個棧幀都有自己的本地變量表,互不影響。所以這就是你傳個引用過去,然后改變了引用的指向對原來沒有形象的原因。

那么,為啥obj.val被修改的時候,val的值會改變呢,因為val的值是存在堆中的,他被復制過來,修改,然后又寫回去堆中,所以就更改了。不明白可以繼續提問

查看完整回答
反對 回復 2019-03-01
  • 3 回答
  • 0 關注
  • 615 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號