引用传递

这块内容网上一搜一大片,但还是自己的理解和亲身测验更靠谱一些。

引用传递1

public class Demo {
    public static void main(String[] args) {
        Person per = new Person("01", "UUUUU");
        changePer(per);
        System.out.println(per);
    }
    private static void changePer(Person per) {
        per.setName("UIASUIAS");
    }
}
结果:
Person{id='01', name='UIASUIAS'}
Process finished with exit code 0

显然,这是引用传递,另外解释一下JVM,方法区存在的是这个person 的描述(也可称之为一个模型),new person()的实例对象存在堆内存中,堆中可以存在多个person的实例。

引用传递2

public class Demo {
    public static void main(String[] args) {
        ArrayList<Person> list = new ArrayList<>();
        Person per = new Person("01", "UUUUU");
        list.add(per);
        System.out.println(JSON.toJSONString(list));
        per.setName("PPPPPPPPp");
        System.out.println(JSON.toJSONString(list));
        change(list);
        System.out.println(JSON.toJSONString(list));
    }
    public static void change(ArrayList<Person> list){
        list.get(0).setName("TTTT");
    }
}
结果:
[{"id":"01","name":"UUUUU"}]
[{"id":"01","name":"PPPPPPPPp"}]
[{"id":"01","name":"TTTT"}]

Process finished with exit code 0

显然2,不仅在list.add()后修改list中的对象为引用传递,把list当做参数传给方法也为引用传递,list.get(0)还是获得了main方法里person的引用地址

引用传递3

 public static void main(String[] args) {
        ArrayList<Person> list = new ArrayList<>();
        Person per = new Person("01", "UUUUU");
        list.add(per);
        ArrayList<Person> list1 = new ArrayList<>();
        list1.addAll(list);
        System.out.println(JSON.toJSONString(list1));
        per.setName("PPPPPPPPp");
        System.out.println(JSON.toJSONString(list1));
    }
结果:
[{"id":"01","name":"UUUUU"}]
[{"id":"01","name":"PPPPPPPPp"}]

Process finished with exit code 0

显然3,这个也是引用传递

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值