Java传引用问题

2024-07-07 1119阅读

本文将介绍 Java 中的引用传递,包括其定义、实现方式、通过引用修改原来指向的内容和通过引用修改当前引用的指向的区别

目录

1、引用传递的概念

2、引用传递的实现方式

3、传引用会发生的两种情况:

通过引用修改当前引用的指向

通过引用修改原来指向的内容。


1、引用传递的概念

在 Java 中,变量可以存储基本类型的值或对象的引用。当一个对象的引用被传递给一个方法或函数时,实际上传递的是该对象的引用而不是对象本身。这种传递方式被称为引用传递。

在引用传递中,方法或函数可以修改传递进来的对象,这个修改可以在函数外部得到反映。这与值传递不同,值传递只是将对象的值进行拷贝,不会对原对象进行修改。

  • 在引用传递中,函数接收到的是参数的引用(地址)而不是参数的值的副本。
  • 这意味着在函数内部对参数的修改会影响到函数外部的原始值。
  • 引用传递常见于复杂数据类型(如数组、对象、类实例等)的传递。
  • 多数情况下,引用传递可以节省内存空间,并且可以避免复制大量数据

    引用传递的实现方式:

    在 Java 中,引用传递的实现方式是通过将对象的引用作为参数传递给方法或函数来实现的。在方法或函数内部,可以通过该引用来访问和修改对象的状态。

    2、传引用会发生的两种情况:

    1. 通过引用,修改原来指向的内容。
    2. 通过引用,修改当前引用的指向。

    对于初学者来说,两种情况容易混淆,那么如何区分呢

    先做一道题小小测试吧

    通过引用修改当前引用的指向

    public class Example{
        String str = new String("good");
        char[ ] ch = { 'a' , 'b' , 'c' };
        public static void main(String args[]){
            Example ex = new Example();
            ex.change(ex.str,ex.ch);
            System.out.print(ex.str + " and ");
            System.out.print(ex.ch);
        }
        public void change(String str,char ch[ ]){
            str = "test ok";
            ch[0] = 'g';
        }
    }

    会输出什么呢?

    答案当然是 good and gbc 

    看张图理解一下吧

    Java传引用问题

    在Java当中我们new出来的对象是保存在堆区的,每一个对象有自己的地址,当我们在main方法中定义出ex时候,ex会指向堆区当中new出来的对象,之后我们在调用change方法,str副本同样的指向到了堆区当中ex对象,而在change方法这里改变str的值,其实是改变了副本str的指向,并没有改变main方法中的str的指向。

    那么同样用本题,如何通过传引用来修改原来指向的内容

    通过引用修改原来指向的内容。

    public class  Example  {
            String str = new String("good");
            char[ ] ch = { 'a' , 'b' , 'c' };
            public static void main(String args[]){
                Example ex = new Example();
                change(ex);
                System.out.print(ex.str + " and ");
                System.out.print(ex.ch);
            }
        private static void change(Example ex) {
                ex.str="test ok";
                ex.ch[0]='g';
        }
    }

    答案是 test ok and gbc 是不是和你猜想的一样呢?(期待期待~)

    加图理解:

    Java传引用问题

    朋友们现在是否已经非常清楚如何通过引用修改原来指向的内容和通过引用修改当前引用的指向了呢

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]