很久沒有寫過博客了,主要是由於最近太忙太忙了,如今天天作的事情絕對是之前兩倍以上。java
今天遇到一個問題,就是傳遞Integer到一個方法裏面,方法裏面對值進行了改變,可是方法外面的沒有生效。code
public class Test { public static void main(String[] args) { Integer age = 1; String name = "a"; changeMode(age, name); System.out.println(age); System.out.println(name); } public static void changeMode(Integer age, String name) { age = 2222; name = "bbbbb"; } }
如上這段代碼輸出的是對象
1 a
雖然方法內部對Integer變量進行了改變可是,方法外部變量沒有變。博客
其實緣由很簡單:class
Java是值傳遞,什麼是值傳遞呢?能夠這麼理解:對於基礎變量傳遞的就是值自己,對於對象傳遞的是地址值。基礎
那麼爲何方法外部變量沒有改變呢?變量
由於傳遞到方法內部的只是對象的地址,而後把地址的值賦給內部變量,在方法內部age=222,name="bbbbb"這兩個語句只是從新給age,name變量賦新的地址值。也就是說Integer 以及String兩個對象內部value是不會變的,自己他們也是final類型的。原理
同理對於Double,Short,Long等基礎變量類也是一樣的效果和原理。方法
那麼有沒有辦法對這些基礎變量類傳遞給方法的時候同時也改變外部對象?static
固然有,雖然value是final類型的,可是能夠經過反色的方式直接改變該地址的value值。