软件设计师之引用传递

这篇博客探讨了Java中值传递与引用传递的区别,强调了引用传递时堆栈的变化对结果的影响。通过示例代码展示了如何在方法中修改变量值,并解释了为何在涉及引用调用时,方法内的修改会影响到原始对象。文章提醒读者在遇到此类问题时要注意审题,理解参数传递方式对计算结果的影响。
摘要由CSDN通过智能技术生成

我们首先来看题(这种题型基本上每年都会考,一不小心就会翻车,一定要重视):
在这里插入图片描述
要是不管引用调用(call by reference)这几个字的话可以算出调用g()方法之后的返回值是19,加上刚开始定义的a,最后的答案是24,但是加上这几个字之后再调用时,a的地址或者说堆栈发生了变化(具体变化大家可以搜一下传递引用之后堆栈变化的文章,在这我们只针对这一类题型讲解就不具体解释了),最后得出来的值就不是24而是28了,接下来我们看解析:
在这里插入图片描述
大家只要记住:
1.引用不会改变已声明并定义的变量,即形参不会改变主方法中的实参
2.地址的引用改变后会影响所有关于地址的引用

这两句话遇到这种题基本上就不会有什么问题了,也就是说只要看到引用调用(call by reference)的话,就拿被调用的方法里面入参的最终值进行计算就行了,只要细心一点一般情况下不会出错,但有的题目不是引用调用是值调用(该怎么算怎么算),这个要认真审题。
接下来我们来看下java代码对这两种调用的实际应用:
java中基本数据类型调用接口发生的是值传递,类是引用传递(不知道这样理解对不对)
在这里插入图片描述

public class SureTest {
    public static void main(String[] args) {
        int i=0;
        System.out.println("值传递之前i的值是:"+i);
        callByValue(i);
        System.out.println("值传递之后i的值是:"+i);
        Person person=new Person();
        person.setName("马化腾");
        System.out.println("引用传递之前的名字是:"+person.getName());
        CallByReference(person);
        System.out.println("引用传递之后的名字是:"+person.getName());
        CallByReferenceTwo(person);
        System.out.println("调用后开辟新堆栈之后的名字是:"+person.getName());

    }

    /**
     *值调用
     * @param i 入参
     */
    public static   void  callByValue(int i){
        i=10;
    }

    /**
     * 引用调用
     * @param person 实体类
     */
    public static void CallByReference(Person person){
        person.setName("麻花藤");
    }
    /**
     * 引用调用(开辟一个新的堆栈)
     * @param person 实体类
     */
    public static void CallByReferenceTwo(Person person){
         person=new Person();
        person.setName("腾化麻");
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值