关于交换两个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 的值

 

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

 

 

 

posted @ 2022-04-04 15:00  刘品水  阅读(77)  评论(0编辑  收藏  举报