9 回答

TA貢獻46條經驗 獲得超27個贊
Java里只有按值傳遞,沒有按引用傳遞,之所以傳遞對象后能可改變這個對象的屬性,是因為在方法中,傳遞的是一個該對象的副本,然后這個副本指向的是該傳遞過來的對象所指向的堆內存中的對象,所以,修改了副本所指向的屬性同樣會修改原始對象的屬性,但是,當使用new時,副本和對象不再指向同一個地址,副本指向了一個新的地址,傳入的參數還是指向原來的地址,所以,樓主這題里雖然在initUser中初始化了User對象,但是只是在這個initUser中user不是空的,傳遞過來的user依然是空的,也就是并沒有初始化外面addUser函數里的user對象,所以會空指針異常

TA貢獻1條經驗 獲得超3個贊
java中,方法的參數是值傳遞,在initUser方法中,將user對象的地址賦值給了initUser中參數user,現在他們指向同一片地址。然而,方法initUser的參數在方法中又指向了另一地址,實際的user對象的地址依舊沒變,仍然為null。

TA貢獻1條經驗 獲得超0個贊
java中的參數傳遞 其實相當于一種賦值,如果是基本類型就是直接賦值,如果是引用類型就是把引用賦給形參,如上題,在addUser方法中 user 雖然是null,但是傳遞給initUser方法的時候他是實參,相當于將這個實參的引用賦給了initUser方法的形參 user,說白了 就是initUser方法的形參user指向了addUser方法里面的user(也就是指向了null),然后呢,在initUser方法里面,把形參user又指向了新的引用 new User(),這里的指向 ?和addUser方法里面的user沒有一點關系,那個user還是指向null

TA貢獻1條經驗 獲得超0個贊
使用對象作為參數傳遞的是對象的引用??!只有String作為參數例外??!
initUser(User user){
user=new User();
}
這個參數傳遞的只是null對象的引用,而user=new User()這句話已經將user指向了一個新的對象;
且這里的user參數和外面的user是不一樣的,inituser(User user)里的user作用域就只是這個函數,所以外面那個user依舊指向了一個空的實例;

TA貢獻3條經驗 獲得超0個贊
User user = null;的user 跟 initUser(User user)方法的user參數不是同一個棧上面的局部變量。
也就是方法里面只是給參數user這個局部變量賦值而已,當initUser方法退出時,參數user局部變量也就沒了。
添加回答
舉報