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

    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(),而非在修改引用成员。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容