当时没想那么多,觉得加个中间变量就可以交换
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 的值

接下来就是考虑反射 目前学校学的忘了 我先去复习下 回来接着写
1503

被折叠的 条评论
为什么被折叠?



