美文网首页
从"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作为形参传参

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

  • 一张图解决java传值传引用问题

    分析此类问题只需要知道两点:java有两种传参方式,基本类型用传值,包装类型用传引用无论是传值还是传引用,形参都是...

  • 一张图解决java传值传引用问题

    分析此类问题只需要知道两点:java有两种传参方式,基本类型用传值,包装类型用传引用无论是传值还是传引用,形参都是...

  • Python共享传参

    函数的参数作为引用 Python 唯一支持的参数传递是 共享传参 ,也就是常说的引用传参。函数内部的形参是实参的别...

  • 引用传递和值传递

    Java (1)基本数据类型传值,对形参的修改不会影响实参; (2)引用类型传引用,形参和实参指向同一个内存地址(...

  • Mybatis mapper文件中传递多个参数的4种方式

    方法1:顺序传参法 方法2:@Param注解传参法 方法3:Map传参法 方法4:Java Bean传参法

  • C++---CHAPTER 6: FUNCTION

    参数传递 传值调用 指针形参: 2.传引用调用 如果函数无需改变引用形参的值,最好将其声明为常量引用。 const...

  • vue-router

    1. vue-router query 和 params 传参 params 传参: 总结: 用params传参只...

  • vue - 路由带参跳转

    vue路由传参按照传参方式可划分为params传参和query传参; params传参分为在url中显示和影藏参数...

  • 8. 汇编-ESP寻址 EBP寻址

    8. 汇编-ESP寻址 EBP寻址 寄存器传参和堆栈传参 寄存器传参 堆栈传参 --ESP寻址 堆栈传参 --EBP寻址

网友评论

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

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