好久没有写过博客了,主要是因为最近太忙太忙了,现在每天做的事情绝对是以前两倍以上。
今天遇到一个问题,就是传递Integer到一个方法里面,方法里面对值进行了改变,但是方法外面的没有生效。
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"; }}
如上这段代码输出的是
1a
虽然方法内部对Integer变量进行了改变但是,方法外部变量没有变。
其实原因很简单:
Java是值传递,什么是值传递呢?可以这么理解:对于基础变量传递的就是值本身,对于对象传递的是地址值。
那么为什么方法外部变量没有改变呢?
因为传递到方法内部的只是对象的地址,然后把地址的值赋给内部变量,在方法内部age=222,name="bbbbb"这两个语句只是重新给age,name变量赋新的地址值。也就是说Integer 以及String两个对象内部value是不会变的,本身他们也是final类型的。
同理对于Double,Short,Long等基础变量类也是同样的效果和原理。
那么有没有办法对这些基础变量类传递给方法的时候同时也改变外部对象?
当然有,虽然value是final类型的,但是可以通过反色的方式直接改变该地址的value值。