• Java 中用的是值传递还是引用传递?


    值传递(Pass by Value)和引用传递(Pass by Reference)是两种参数传递的方式。

    值传递是指在调用函数或方法时,将参数的值复制给一个临时变量然后传递给函数或方法。在函数或方法内部,对参数进行修改不会影响到原始变量。

    引用传递是指在调用函数或方法时,将参数的引用(内存地址)传递给函数或方法。在函数或方法内部,对参数进行修改会改变原始变量。

    在 Java 中,参数传递采用的是值传递。具体来说:

    • 对于基本数据类型(如int、float等),值本身会被复制,传递的是该值的副本。修改函数或方法内的参数不会影响原始变量。

    • 对于引用类型(如数组、类的实例等),传递的是对象的引用的副本。原始变量和函数或方法内的参数指向同一个对象,对参数的修改会影响原始对象,但如果参数重新分配了一个新的对象,不会影响原始对象。

    需要注意的是,虽然 Java 中的参数传递是值传递,但在传递引用类型时,由于传递的是引用的副本,可能产生误解,让人以为是引用传递。但从底层实现来看,仍然是值传递的机制。

    1. 值传递的示例:
    public class Example {
        public static void main(String[] args) {
            int x = 10;
            changeValue(x);
            System.out.println("x: " + x); // 输出: x: 10
        }
        
        public static void changeValue(int value) {
            value = 20;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在上面的示例中,我们将变量x的值传递给changeValue()方法。在方法内部,参数value接收到x的值的副本,然后将其修改为20。但这个修改不会影响到原始的变量x,因此打印出的值仍然是10。

    1. 引用传递的示例:
    public class Example {
        public static void main(String[] args) {
            int[] arr = {1, 2, 3};
            changeArray(arr);
            System.out.println("arr[0]: " + arr[0]); // 输出: arr[0]: 100
        }
        
        public static void changeArray(int[] array) {
            array[0] = 100;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这个示例中,我们将一个包含了3个元素的整数数组传递给changeArray()方法。在方法内部,参数array接收到了该数组的引用的副本。通过修改array数组的第一个元素,也就是原始数组的第一个元素,将其改为100。由于在方法之外仍然引用着相同的数组,所以在打印时会显示修改后的值。

    虽然第二个示例中看起来像是传递了一个引用,但从底层来讲,实际上是传递了一个引用的副本,因此仍然可以归类为值传递。

  • 相关阅读:
    Linux systemctl 详解&自定义 systemd unit
    @Autowired注解 --required a single bean, but 2 were found出现的原因以及解决方法
    【论文阅读笔记】Explicit Visual Prompting for Low-Level Structure Segmentations
    计算机毕业设计(83)php小程序毕设作品之服务预约家政小程序系统
    OpenAI开发者大会之后,当何去何从?
    P01 单元测试
    A Unified MRC Framework for Named Entity Recognition
    uniapp 登录功能实现
    DolphinScheduler 1.x使用经验篇及bug解决篇
    编程基础 —— 链表
  • 原文地址:https://blog.csdn.net/drhnb/article/details/133936829