Java 中的值传递和引用传递 ?

这篇具有很好参考价值的文章主要介绍了Java 中的值传递和引用传递 ?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 介绍

  值传递:值传递(Pass-by-Value)当我们向方法传递参数时,实际上是将该参数的值进行拷贝,并将拷贝后的值传递给方法内部。在方法内部对参数进行修改不会影响原始变量的值。

  引用传递:引用传递(Pass by reference)是指方法调用时实参(即传入方法的参数)是一个对象的引用,而不是对象本身。当一个对象的引用被传递给一个方法时,方法内部对该引用的操作会影响到原始对象。

    public static void main(String[] args) {
        int value = 10;
        StringBuilder reference = new StringBuilder("Hello");

        // 值传递
        changeValue(value);
        System.out.println("Value after method call: " + value);

        // 引用传递
        changeReference(reference);
        System.out.println("Reference after method call: " + reference);
    }

    public static void changeValue(int number) {
        number = 20;
    }

    public static void changeReference(StringBuilder str) {
        str.append(" World");
    }

// 输出结果:
    Value after method call: 10
    Reference after method call: Hello World

 文章来源地址https://www.toymoban.com/news/detail-546611.html

二. 执行过程:

    值传递:

      - 首先,在调用方法时,将实际参数的值复制一份,并将这份副本传递给方法进行操作。

      - 在方法内部,这个副本的值被赋给一个新的局部变量。

      - 在方法执行过程中,对该局部变量的任何改动都不会影响原始的变量,因为它们指向的是不同的内存空间。

      - 当方法执行完毕后,这个局部变量和方法的栈帧都会被销毁,而原始的变量的值保持不变。

    基本数据类型的传递过程中,传入的值被复制到方法内部,并在方法内部进行操作,但不会影响原始变量的值。

    

    引用传递:

      - 创建一个对象并将其引用赋值给一个变量。 

      - 将这个变量作为参数传递给一个方法。

      - 在方法内部,参数变量接收到了对原始对象的引用。

      - 在方法内部修改参数变量所指向的对象时,原始对象也会受到影响。

      - 方法执行完毕后,返回到原始调用处,可以通过原始变量访问到被修改后的对象。

    对象的引用传递意味着传递的是对象的引用,通过引用可以访问和修改原始对象的属性。

 

三. 扩展

  引用类型传递:

public class User {

    private String name;
    private int age;

 // 略:构造方法、getter、setter、toString() 等
}


public class Main {
    public static void main(String[] args) {
        // 创建一个实体对象, 存储在堆内存中。
        User user = new User("小明", 18);
        System.out.println(method(user));
        System.out.println(user);
    }

    //创建一个method(),将实体参数传入
    public static User method(User user) {
        user.setName("小美");
        user.setAge(20);
        return user;
    }
}


输出结果:
    User{name='小美', age=20}
    User{name='小美', age=20}

 

    ① 在栈中分配内存空间,创建一个名为 "user" 的引用变量;

    ② 在堆中分配内存空间,创建一个 User 类的实例对象,并将其地址赋值给 "user" 引用变量。

    ③ 调用 User 类的构造方法,传入参数 "小明" 和 18,初始化实例对象的属性值。

    ④ method() 方法进栈,并传递user变量的引用地址值作为参数。

    ⑤ 进入方法体中,执行setter 方法,改变user变量中的属性值,user.setName("小美"); user.setAge(20);并return user; 此时已经改变了引用地址值内的属性;

    ⑥  打印输出结果。

 

  

  Java 中的值传递和引用传递 ?

 

 

 

 

完 

 

  

 

到了这里,关于Java 中的值传递和引用传递 ?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 注意!JAVA中的值传递

    前言:今天在解决一个问题时,程序总是不能输出正确值,分析逻辑思路没问题后,发现原来是由于函数传递导致了这个情况。 LeetCode 113 问题:给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 示例   我

    2024年02月15日
    浏览(41)
  • 重温C#中的值类型和引用类型

    在C#中,数据类型分为 值类型 和 引用类型 两种。 引用类型变量存储的是数据的引用,数据存储在数据堆中,而值类型变量直接存储数据。对于引用类型,两个变量可以引用同一个对象。因此,对一个变量的操作可能会影响另一个变量引用的对象。对于值类型,每个变量都有

    2024年02月15日
    浏览(51)
  • 【Java】引用传递?值传递?

    引用传递和值传递,从上学那会儿就开始强调的概念,不管你是计算机相关专业还是自学Java,一定听过这么一句话: 方法调用参数如果是对象,那就是引用传递,如果是基本数据类型,就是值传递。 比如:function(Object o)就是引用传递,function(int i)就是值传递。这两个概念似

    2024年02月05日
    浏览(38)
  • java是值传递还是引用传递

    java是值传递;值传递是指在调用方法时将实际参数拷贝一份传递到方法中,这样在方法中如果对参数进行修改,将不会影响到实际参数;当传的是基本类型时,传的是值的拷贝,对拷贝变量的修改不影响原变量;当传的是引用类型时,传的是引用地址的拷贝,但是拷贝的地址

    2024年02月09日
    浏览(38)
  • Java 引用传递

    引用传递是 Java 中一个重要的概念,它与值传递不同,可以使得函数或方法可以修改传入的对象。本文将介绍 Java 中的引用传递,包括其定义、实现方式、与值传递的区别以及示例代码。 在 Java 中,变量可以存储基本类型的值或对象的引用。当一个对象的引用被传递给一个方

    2024年02月09日
    浏览(38)
  • C#的值类型和引用类型

    在C#中,数据类型可以分为值类型(Value Types)和引用类型(Reference Types)两种。下面是对它们的详细解释和示例说明: 值类型(Value Types): 值类型变量直接包含它们的数据,存储在栈上。 值类型包括整数类型(如int、byte、char)、浮点类型(如float、double)、布尔类型(如

    2024年02月15日
    浏览(44)
  • java将map中的值复制到另一个map中

    问题描述: 需要将一个sourceMap中设置的属性值copy到另一个targetMap中去,要求在sourceMap中没有设置的值,targetMap要保持不变,并且支持List中有Map的情况的复制。 **解决方案:**递归复制map中的值,List中如果是map的话则继续递归复制值。代码在最后面 sourceMap如下: targetMap如下

    2024年02月12日
    浏览(49)
  • vue中子组件间接修改父组件传递过来的值

    Vue官方文档Props单向数据流讲解 Vue中遵循 单向数据流 ,所有的 props 都遵循着单向绑定原则,props 因父组件的更新而变化, 自然地将新的状态向下流往子组件 ,而 不会逆向传递 。这避免了子组件意外修改父组件的状态的情况,不然应用的数据流将很容易变得混乱而难以理解

    2024年02月15日
    浏览(42)
  • 【spark】java类在spark中的传递,scala object在spark中的传递

    记录一个比较典型的问题,先讲一下背景,有这么一个用java写的类 然后在spark中使用的时候: 原因: scala的object对应的就是java的静态成员,可以反过来理解java的所有静态成员可被抽取成伴生对象(虽然现实中是scala最终编译成java)。以上面的JavaClass0 例子可理解为等价的

    2024年02月11日
    浏览(38)
  • 【Jmeter之get请求传递的值为JSON体实践】

    Jmeter之get请求传递的值为JSON体实践 1、在URL地址后面拼接,有多个key和value时,用链接 2、在Parameters里面加上key和value 尝试一:把json放到value,勾选编码,发送请求后报错,提示参数异常 尝试二:把json进行URL编码后,再放到URL地址后面,发现json里面有需要参数化的值,所以

    2024年01月16日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包