引用类型参数绑定 | 针对廖雪峰老师的两个例子的个人理解(是我太笨,对知识比较慢热)

本文通过对廖雪峰老师关于方法讲解的实例分析,详细解释了Java中基本类型和引用类型参数传递的区别。总结出:基本类型传递为值复制,双方修改互不影响;引用类型传递双方指向同一对象,修改会影响对方。并以示例说明了字符串对象不可变性和数组参数绑定的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是一个风和日丽的上午,

如果你看到了我的文章,

我想,

这是巧合,

这不是巧合,

这是一个必然,

一个你看了廖雪峰老师的文章 方法 | 廖雪峰  之后,

想搞明白,

才有了这次遇见!

从而众里寻答千百度,

蓦然回首,

来到了我这里。

话不多说,

抛出结论

1. 基本类型参数的传递,是调用方值的复制。双方各自的后续修改,互不影响

2. 引用类型参数的传递,调用方的变量,和接收方的参数变量,指向的是同一个对象。双方任意一方对这个对象的修改都会影响对方(因为指向同一个对象嘛)。

public class Main {
    public static void main(String[] args) {
        Person p = new Person();
        String bob = "Bob";
        p.setName(bob); // 传入bob变量
        System.out.println(p.getName()); // "Bob"
        bob = "Alice"; // bob改名为Alice
        System.out.println(p.getName()); // "Bob"还是"Alice"?
    }
}

class Person {
    private String name;

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

不要怀疑引用参数绑定的机制,试解释为什么上面的代码两次输出都是"Bob"?

分析图

我自己画了一个图,

大致是这样的,

请各位看官欣赏:

根据【抛出结论】进入

你问我答环节

  引用类型参数的传递,调用方的变量,和接收方的参数变量,指向的是同一个对象。双方任意一方对这个对象的修改都会影响对方(因为指向同一个对象嘛)。

 

你问: 调用方的变量,是谁? 

我答: 这还不简单嘛,一看就知道, p.setName(bob); 中的bob,是调用方的变量 。


你问:接收方的参数变量,是谁?

我答:你你你,你在侮辱我?肯定是name啊。

public void setName(String name) {
    this.name = name;
}

你问:回归结论,看这句话,【指向的是同一个对象 来,你说谁,这个对象,是谁?

我答:是"Bob"这个字符串对象。

你问:确定指向的对象是"Bob"吗,而不是字符串变量 bob?

我答:确定,不是字符串变量bob,字符串变量bob是调用方的变量


你问:再看结论这句话,【双方任意一方对这个对象的修改都会影响对方】。你来说说,bob="Alice"做了什么?或者说是bob修改了字符串Bob了吗?

我答:啥玩意?你一个bob还想修改字符串Bob?你怕不是傻了吧?Java语言中,明确说明了,字符串变量一旦定义,就无法修改!!!

我答:语句bob = "Alice",仅仅是改变了自身(bob)的引用而已,由原来的引用"Bob",现在引用了"Alice"。而对于我们前面提到的调用方与参数变量双方,并没有修改"Bob"(过呢本没有这个能力修改),所以,既然双方没有修改对象Bob,那么就谈不上影响对方。

所以,当我们输出的时候,

还是p.getName()的输出仍然是:Bob。

【分析到此结束】


话说回来,如果程序这样写:

增加一条语句,

再次写入p.setName(bob);

这是后会发生什么呢?

看图:

想都不用想,

这时候,

会输出Alice。

上面提到的双方都没有修改对象,自然谈不上对对方产生影响。

那什么时候,是一方修改了对象,会对另一方造成影响呢?

那就是廖雪峰老师举的参数绑定为数组的例子,

这个通过画图的例子,

应该不难理解,

对我来说,

就是这个Bob \ Alice的例子,

令人头疼,

特经上述分析,

与大家分享,

欢迎多多交流。


求真务实

熟能生巧

抓紧时间

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北溟南风起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值