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

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日

相关文章

  • JAVA多线程之中断机制及处理中断的方法

    JAVA多线程之中断机制及处理中断的方法 在多线程编程中,线程可能会因为各种原因(比如等待不必要的资源、等待IO操作或者Long Running操作)而进入阻塞状态,我们常使用中断机制来解决这种情况。 中断机制 简单来说,中断机制就是用来打断阻塞状态的线程。当一个线程被中断时,它会收到一个 InterruptedException 异常,执行中断处理方法;如…

    Java 2023年5月18日
    00
  • SpringBoot通过整合Dubbo解决@Reference注解问题

    一、SpringBoot整合Dubbo 利用Dubbo作为RPC(远程过程调用)传输框架,可以将服务分成消费方和提供方两个角色,而Dubbo根据角色的不同提供了不同的注解方式来实现。在消费方和提供方都使用Dubbo的情况下,SpringBoot整合Dubbo优势更加明显。 二、Dubbo @Reference 注解问题 Dubbo的注解@Reference可…

    Java 2023年5月19日
    00
  • extJs 常用到的增,删,改,查操作代码

    下面我将为您详细讲解 ExtJS 常用到的增、删、改、查操作的完整攻略。这里主要针对 ExtJS 版本 6.2 进行讲解。 概述 在 ExtJS 中,我们常常需要进行数据的增、删、改、查操作。这些操作基本都是基于 Ext.data.Store 和 Ext.data.Model 进行的。 其中,Ext.data.Store 负责连接数据源(可以是远程 URL,…

    Java 2023年6月15日
    00
  • java实现文件保存到本地的方法

    Java 实现文件保存到本地的方法可以通过以下步骤来实现。 第一步:准备保存文件的本地目录 在 Java 代码中,我们需要提前准备好一个本地保存文件的目录,可以使用 File 类来生成目录,示例代码如下: File directory = new File("D:/files"); if(!directory.exists()){ dir…

    Java 2023年5月20日
    00
  • spring data jpa 创建方法名进行简单查询方式

    Spring Data JPA 是Spring Data 技术栈中的一个子项目,它简化了基于 JPA 技术栈的数据访问层的开发,其中使用方法名进行简单查询是其特性之一。 1. 配置 Spring Data JPA 首先需要在 Spring Boot 项目中配置 Spring Data JPA 支持,具体步骤如下: 在 pom.xml 中引入 Spring D…

    Java 2023年6月3日
    00
  • Spring Boot Logging Level设置为off时的Bug

    为了更好的解释“Spring Boot Logging Level设置为off时的Bug”问题以及解决方案,我们需要先了解以下几个问题: 什么是Logging Level Spring Boot默认的Logging Level设置 Logging Level为off时会出现什么问题 如何避免Logging Level为off导致的问题 现在我们按照这个顺序来…

    Java 2023年5月20日
    00
  • java解析出url请求的路径和参数键值对类(解析出url请求的路径,包括页面)

    下面是详细的攻略: 1. 确定需求和目标 在写代码之前,我们需要明确自己的目标和需求,即需要完成什么样的功能。根据题目的要求,我们需要编写一个Java类,该类可以解析出传入的URL请求的路径和参数键值对。 2. 解析路径和参数 在Java中,我们可以使用Java内置的类库中的java.net.URL和java.net.URLConnection类来获取URL…

    Java 2023年6月15日
    00
  • Android Studio 一键生成Json实体类教程

    下面是详细的“Android Studio 一键生成Json实体类教程”的攻略: 1. 前言 在进行Android开发中,我们经常需要将从后台接口获取到的Json数据转化为实体类进行处理。手动创建实体类费时费力,尤其是在Json数据结构较为复杂的情况下。幸好,现在Android Studio提供了一个非常实用的插件,可以通过一键快速生成Json对应的实体类,…

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