带你详细了解Java值传递和引用传递

带你详细了解Java值传递和引用传递

Java中传递参数有两种方式:值传递和引用传递。理解这两种方式在Java编程中的应用非常重要。

值传递

在Java中,所有的基本数据类型都是采用值传递。当调用方法时,基本数据类型的参数会被复制一份,传入方法内部,方法内对参数的任何改变都不会影响方法外部的数据。这是因为复制后的参数是一个新的对象,与外界的原始对象没有关系。

下面是一个值传递的示例:

public class ValueTransferTest {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;

        System.out.println("交换前:" + "a=" + a + ", b=" + b);

        // 交换变量a和b的值
        swap(a, b);

        System.out.println("交换后:" + "a=" + a + ", b=" + b);
    }

    public static void swap(int num1, int num2) {
        int temp = num1;
        num1 = num2;
        num2 = temp;
    }
}

运行结果:

交换前:a=10, b=20
交换后:a=10, b=20

在这个示例程序中,我们定义了一个swap()方法,该方法接受两个整数参数并将它们的值交换。然而,当我们在main()方法中调用swap()方法时,发现值并没有交换。这是因为Java采用的是值传递,而不是引用传递。

引用传递

在Java中,所有的对象都是采用引用传递。当调用方法时,对象的引用会被复制一份,传入方法内部。即使方法内改变了对象的状态,方法外部的对象也会受到影响。这是因为外部和内部引用的是同一个对象,对该对象的操作会直接影响到该对象在内存中的状态。

下面是一个引用传递的示例:

public class ReferenceTransferTest {
    public static void main(String[] args) {
        Person p = new Person("Tom");
        System.out.println("调用前:" + p.getName());

        changeName(p, "Jerry");
        System.out.println("调用后:" + p.getName());
    }

    public static void changeName(Person p, String newName) {
        p.setName(newName);
    }
}

class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

输出结果:

调用前:Tom
调用后:Jerry

在这个示例程序中,我们定义了一个Person类和一个changeName()方法。在main()方法中,我们创建了一个名为pPerson对象,并将其作为参数传递给changeName()方法。该方法将p对象的名字改为Jerry,之后在main()方法中打印出该对象的名字,发现已经被改为了Jerry。这就证明了Java中是采用引用传递的。

结论

  • 值传递只是将参数的值复制了一份传递给方法,方法内对参数做了任何操作都不会改变方法外部的数据。

  • 引用传递是将对象的引用复制一份传递给方法,方法内可以通过改变对象的状态来修改方法外部的数据,因为方法内外引用的是同一个对象。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:带你详细了解Java值传递和引用传递 - Python技术站

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

相关文章

  • java与JSON数据的转换实例详解

    下面是Java与JSON数据的转换实例详解的完整攻略。 什么是JSON JSON是JavaScript Object Notation的缩写,它是一种轻量级、易于读写的数据格式,可以被多种编程语言解析和生成。JSON的主要优势在于它的可读性、可解析性和可靠性,由于其原始格式为文本,因此可以通过网络传输,而且多种编程语言都提供了JSON的解析和生成支持。 JS…

    Java 2023年5月26日
    00
  • tomcat 6.0.20在一个机器上安装多个服务的方法

    下面是详细的过程: 1. 下载安装Tomcat 首先需要在机器上下载Tomcat并进行安装。可以从官网下载Tomcat的安装文件(http://tomcat.apache.org/),根据机器操作系统的不同选择32位/64位版本。下载完成后,双击运行安装程序,并按照提示进行安装。 2. 配置Tomcat服务 安装完成后,需要为Tomcat服务进行配置。配置文…

    Java 2023年5月19日
    00
  • 详解Mysql如何实现数据同步到Elasticsearch

    如何实现MySQL数据同步到Elasticsearch?本文将为大家提供一种常见的实现方法,即使用Logstash工具来实现同步。具体步骤如下: 步骤一:安装Logstash 首先,我们需要安装Logstash,它是一个开源的数据处理工具,可以将各种形式的数据发送到Elasticsearch。可以通过以下方式安装: wget https://artifact…

    Java 2023年6月16日
    00
  • Java生成压缩文件的实例代码

    生成压缩文件是编程中常见的功能之一,Java在java.util.zip包下提供了ZipOutputStream和ZipEntry类,可以方便地生成zip压缩文件。本文分享Java生成压缩文件的实例代码。 1. 导入相关类 import java.io.File; import java.io.FileInputStream; import java.io.…

    Java 2023年5月26日
    00
  • AngularJS基于provider实现全局变量的读取和赋值方法

    要实现全局变量的读取和赋值,可以使用AngularJS中的provider。 provider是AngularJS中的一个服务提供者,它可以在config阶段(即AngularJS框架初始化之前)注入到AngularJS应用中。用它可以将服务定义成可配置的,在应用配置阶段根据需要进行一些配置。 使用provider实现全局变量的读取和赋值,需要先定义一个pr…

    Java 2023年6月15日
    00
  • IntelliJ IDEA基于SpringBoot如何搭建SSM开发环境的步骤详解

    IntelliJ IDEA基于SpringBoot如何搭建SSM开发环境的步骤详解 1. 环境准备 在开始搭建SSM开发环境之前,我们需要准备以下环境: JDK 1.8或以上版本 IntelliJ IDEA Maven SpringBoot 2. 创建SpringBoot项目 在IntelliJ IDEA中创建一个SpringBoot项目,可以使用Sprin…

    Java 2023年5月18日
    00
  • 详解Java的JDBC API中事务的提交和回滚

    下面是详解Java的JDBC API中事务的提交和回滚的攻略: 1. 事务基本概念 在数据库操作中,事务是指一系列的数据库操作,这些操作要么全部执行成功,要么全部失败。事务操作具有原子性、一致性、隔离性和持久性四个特征,简称ACID(Atomicity、Consistency、Isolation、Durability)。其中: 原子性:指事务中的所有操作要么…

    Java 2023年5月20日
    00
  • Java实现json数据处理的常用脚本分享

    下面是Java实现json数据处理的常用脚本分享的完整攻略: 一、前置知识 在学习Java实现json数据处理之前,我们需要先了解什么是JSON和Java中处理JSON数据的类库,如:Gson, Jackson等。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前后端数据传输。JSON主要由两种结构组成:键…

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