很久没有写过博客了,主要是由于最近太忙太忙了,如今天天作的事情绝对是之前两倍以上。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值。