关于交换两个Integer类型的值
当时没想那么多,觉得加个中间变量就可以交换
public static void swap(Integer i, Integer j) { Integer temp = new Integer(i); i = j; j = temp; } public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { Integer i = new Integer(10); Integer j = new Integer(20); swap(i, j); System.out.println("i = " + i + ", j = " + j); }
然而运行起来了才发现根本没有变化
Java 中有两种参数传递
-
值传递
方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值。
-
引用传递
也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。
可是 Integer 不就是 引用类型?
为什么不能改变呢?
查看源码
这个属性也是表示这个 Integer 实际的值,但是他是 private final 的,Integer 的 API 也没有提供给外部任何可以修改它的值接口,也就是说这个值改变不了。
简单理解就是上面的 swap 方法其实真实交换的是 两个形参 i 和 j 的值,而没有去改变 mian方法 i 和 j 的值
接下来就是考虑反射 目前学校学的忘了 我先去复习下 回来接着写