Java傳值與傳地址
Java中傳值還是傳址問題在我初學Java的時候一直都沒有很好的理解它,一直都以爲Java不存在傳值,只有傳地址,很迷惑Java有傳值傳址的問題嗎?
這幾天工作不是很忙把我想到的瞭解的整理一下,記錄自己的成長曆程。
Java到底傳值還是傳址?
Java傳值,傳址都有的,並不是所有的都是傳址。
Java什麼時候傳址,什麼時候傳值?
Java的八種基本類型都是直接傳值的,其他引用類型是地址傳遞。
如何證明Java傳遞的是值或是地址?
使用System.out.println() 打印 如果打印結果是地址那就是傳址如果是具體值那就是傳值。(這樣說有點偏頗,但可以這樣大體判別,其中String是個例外)
爲什麼除String外的引用類型直接打印都是地址,而String是個例外呢?
所有的引用數據類型都會繼承Object,所有的打印都會走Object 的toString()方法,而String其實是一個char[],它自己重寫了toString()方法。所以會打印值,而其他引用類型打印地址。
傳值與傳址有什麼不同嗎?
有的,傳址的如果對象的值被改變那其他的對該對象的引用的值會同步的改變。而傳值的修改對象的值,是不會對其他對象造成影響的,或者說無法傳遞改變。(String又是一個例外,它雖然傳址,但缺無法傳遞修改)
爲什麼String傳遞的值無法被修改呢?
String是一個final 修飾的最終類,它的很多方法都被final修飾,final不可變(老子一臉的懵逼,一個問題引出了n個問題);
是所用的final 修飾的類都無法進行傳址修改嗎?
這個不知道,先空着,待我學習好了再寫答案。現在老闆安排活兒了。mpp