美文网首页
从"java传参只传引用"了解Integer作为形参传参

从"java传参只传引用"了解Integer作为形参传参

作者: sudaR | 来源:发表于2019-10-31 01:52 被阅读0次
        public static void main(String[] args) {
            Integer i = new Integer(1);
            Integer j = new Integer(2);
            i = 10;
            i = 20;
            swap(i, j);
            System.out.println(i + "," + j);  //10,20
        }
        private static void swap(Integer i, Integer j) {
            Integer n = i;
            i = j;
            j = n;
            System.out.println(i + "," + j);  //20,10
        }
    

    虽然参数传递的是引用对象,但是Integer源码里用来存储int对象的value使用了final进行修饰:

    //...
    private final int value;
    
    public Integer(int value) {
        this.value = value;
    }
    //...
    

    所以我们无论如何也无法对该值进行修改了。

    但为何使用=赋值final对象而编译器和IDE均不报错?
    笔者猜测为=右侧是一个new方法,已不再是原本的对象。(这里=不是赋值行为,是new行为)

    从c语言角度理解:形参i,j都是指针,使用=已经是在调用malloc(),而非在修改引用成员。

    相关文章

      网友评论

          本文标题:从"java传参只传引用"了解Integer作为形参传参

          本文链接:https://www.haomeiwen.com/subject/dsixbctx.html