详解java的值传递、地址传递、引用传递

yizhihongxing

1. 值传递

值传递是指在方法调用过程中,实际传递的是变量的值,如果传递的是基本数据类型或者不可改变的对象,则不会改变原有变量的值。这是Java中的默认传递方式。

示例1:

public class ValuePassingExample{
    public static void main(String[] args) {
        int originalValue = 10;
        System.out.println("Original Value: " + originalValue);
        changeValue(originalValue);
        System.out.println("Modified Value: " + originalValue);
    }

    private static void changeValue(int num) {
        num = num + 5;
        System.out.println("Value Changed: " + num);
    }
}

输出结果:

Original Value: 10
Value Changed: 15
Modified Value: 10

从上面的示例可以看出,在方法调用changeValue()方法之前,原始的变量originalValue的值为10。在调用方法changeValue()时,将原始变量的值传递给了形参num。而在方法中对num变量的操作不会影响到原始变量的值,也就是说,原始变量originalValue的值保持不变。

2. 引用传递

引用传递是指在方法调用过程中,实际传递的是对象的引用,修改引用对象的属性值,会对原始对象的属性值产生改变,但是不能让引用参数"指向"另外一个对象。

示例2:

public class ReferencePassingExample {
    public static void main(String[] args) {
        StringBuilder originalName = new StringBuilder("David");
        System.out.println("Original Name: " + originalName);
        changeName(originalName);
        System.out.println("Modified Name: " + originalName);
    }

    private static void changeName(StringBuilder name) {
        name.append(" Smith");
        System.out.println("Name Changed: " + name);
    }
}

输出结果:

Original Name: David
Name Changed: David Smith
Modified Name: David Smith

从上面的示例可以看出,在方法调用changeName()方法之前,原始变量originalName引用指向了一个String类型的对象"Davis"。在调用方法changeName()时,将原始变量的引用传递给了形参name,形参name指向了原有的对象"Davis"。在方法中对name对象的属性进行了修改,即在"Davis"后面追加了一个" Smith",此时原始变量originalName与name引用都指向了修改后的对象"David Smith"。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解java的值传递、地址传递、引用传递 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Spring Security登录表单配置示例详解

    下面我将详细讲解“Spring Security登录表单配置示例详解”。 什么是Spring Security? Spring Security是一种基于Spring框架的安全认证和授权的框架。它提供了很多功能,如身份验证、访问控制、凭证管理、会话管理等,可以帮助我们轻松地保护web应用程序。在Spring Boot应用程序中,只需要简单地加上几个依赖就能快…

    Java 2023年5月20日
    00
  • java的Jackson将json字符串转换成泛型List

    转换JSON字符串成Java对象是Java程序中经常需要做的一个任务。有很多开源库能够帮助我们完成这一任务,如Jackson。Jackson 是一个高效的 JSON 处理器,能够将 JSON 字符串解析成 Java 对象。 Jackson 支持将 JSON 转换成 Java 对象,也支持将 JSON 转换成泛型 List,本篇攻略将介绍 Jackson 将 …

    Java 2023年5月26日
    00
  • 在java中获取List集合中最大的日期时间操作

    获取List集合中最大的日期时间操作可以通过以下步骤完成: 遍历List集合,获取集合中的每一个时间对象。 将每一个时间对象转换成时间戳,然后比较大小,找到时间戳最大的时间对象。 将时间戳最大的时间对象再次转换成日期时间格式。 具体实现过程如下: 导入需要使用的工具类: import java.text.ParseException; import java…

    Java 2023年5月20日
    00
  • JavaScript反射与依赖注入实例详解

    JavaScript 反射与依赖注入实例详解 JavaScript 反射和依赖注入是现代 web 应用程序发展中的两个重要的技术,本文将深入讨论这两个概念,并提供一些具体的实例和攻略。 什么是 JavaScript 反射? JavaScript 反射是一种技术,它可以在运行时检查一个对象的属性和方法,并对其进行操作。这通常用于创建更动态和灵活的应用程序。 如…

    Java 2023年5月26日
    00
  • Java递归算法详解(动力节点整理)

    Java递归算法详解(动力节点整理) 什么是递归? 递归是指在函数的定义中,直接或间接地调用自身的行为。 递归调用的实现过程 递归调用是通过栈实现的,每一次函数调用会将调用时的参数和函数运行的状态信息压入栈中,函数运行完成后,再从栈中弹出上一次调用的信息并恢复上一种状态信息,继续执行下去。 递归调用的分类 递归调用可以分为两类:直接递归和间接递归。 直接递归…

    Java 2023年5月26日
    00
  • java中@requestMappling注解的使用

    Java中@RequestMapping注解的使用 在Java中,@RequestMapping注解是一个非常常用的注解,它用于将HTTP请求映射到控制器的处理方法上。在本文中,我们将详细讲解@RequestMapping注解的使用,并提供两个示例来说明如何使用这个注解。 基本用法 @RequestMapping注解可以用于类级别和方法级别。在类级别上使用@…

    Java 2023年5月18日
    00
  • Java 使用IO流实现大文件的分割与合并实例详解

    Java 使用IO流实现大文件的分割与合并实例详解 前言 在现代应用程序中,经常需要处理非常大的文件。处理大文件的一种常见方法是将它们分成更小的文件,这有助于减少I/O操作的时间和资源消耗。在Java中,可以使用IO流来实现大文件的分割与合并。 分割文件 读取源文件 首先,我们需要通过使用Java IO API中的FileInputStream读取要分割的源…

    Java 2023年5月20日
    00
  • java BigDecimal精度丢失及常见问分析

    下面是对于“java BigDecimal精度丢失及常见问题分析”的完整攻略。 1. 背景 在Java中进行精确浮点数计算,常常使用BigDecimal类。BigDecimal类有很强的精度和舍入模式控制能力,但是如果不注意使用规范,也会出现与浮点数相似的精度问题:丢失精度。 2. 问题分析 2.1 浮点数精度问题 Java中的浮点数精度问题主要由二进制浮点…

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部