java通过实例了解值传递和引用传递

yizhihongxing

首先,需要理解Java中两种数据类型传递方式:值传递和引用传递。值传递是指在方法调用时传递的是实际的值,而引用传递则是指传递的是对象的引用。

值传递(Value Passing)

Java中的基本数据类型,如int、float、boolean等都是通过值传递的方式进行传递。这意味着,当你将一个基本数据类型作为参数传递给一个方法时,它会复制参数的值,并将其传递给方法。在方法内部对参数的任何更改都不会影响到原始参数的值。以下是一个值传递的示例:

public class ValuePassingExample {
    public static void main(String[] args) {
        int x = 5; 
        changeValue(x); 
        System.out.println("x = " + x); 
    }

    public static void changeValue(int a) {
        a = 3; 
    }
}

输出:

x = 5

在上面的代码中,我们定义了一个 x 变量并给它赋值为 5。然后调用 changeValue 方法,并将 x 作为参数传递。在 changeValue 方法内部,我们将 a 的值更改为 3。然而,当我们回到主方法,我们发现 x 的值仍然是 5。这就是因为在方法调用中传递给参数的值被复制到方法内部,而且方法内部对这个值的改变不会影响原来的值。

引用传递(Reference Passing)

与值传递不同,Java 引用传递只传递对象的引用,这意味着在方法中调用参数时,它实际上是调用了对象的引用。这样,当在方法中修改对象时,对原始对象的改变是可见的。示例代码:

public class ReferencePassingExample {
    public static void main(String[] args) {
        MyClass obj = new MyClass();
        obj.setVal(10);
        changeReference(obj);
        System.out.println("obj.val = " + obj.getVal());
    }

    public static void changeReference(MyClass a) {
        a = new MyClass();
        a.setVal(20);
    }
}

class MyClass {
    private int val;
    public void setVal(int val) {
        this.val = val;
    }
    public int getVal() {
        return val;
    }
}

输出:

obj.val = 10

在这个例子中,我们定义了一个 MyClass 类,其中包含一个 val 成员变量和相应的 getter 和 setter 方法。在主方法中,我们实例化了一个 MyClass 类型的对象,然后设置了它的值为 10。接下来调用了 changeReference 方法,并将刚才实例化的对象作为参数传递。在 changeReference 方法内部,我们创建了一个新的 MyClass 类型的对象,并将其引用分配给本地变量 a,然后将 val 成员变量的值设置为 20。

changeReference 方法完毕时,控制流回到主方法,我们发现对象的值仍然为 10。与值传递不同,Java 引用传递仅传递对象的引用,因此在方法调用中传递的实际上是对象的引用,而不是对象本身。这就是为什么在 changeReference 方法中对初始对象的任何更改不会影响原来的对象值,而是会影响方法内部的本地变量。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java通过实例了解值传递和引用传递 - Python技术站

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

相关文章

  • Spring Boot中slf4j日志依赖关系示例详解

    好的!首先,我们来看一下如何在Spring Boot中使用slf4j日志依赖关系。 1. 什么是SLF4J? SLF4J(Simple Logging Facade for Java)是Java日志框架的一个抽象层,它允许应用程序在运行时使用任何日志框架,并且可以在不修改应用程序代码的情况下更改底层的日志框架。 2. 添加slf4j的依赖关系 要在Sprin…

    Java 2023年5月31日
    00
  • 详解CentOS7.0安装与配置Tomcat-7

    下面是详解CentOS7.0安装与配置Tomcat-7的完整攻略: 安装Java 使用yum安装Java: sudo yum install java 验证Java是否安装成功: java -version 下载与安装Tomcat 下载Tomcat7: wget https://mirror.bit.edu.cn/apache/tomcat/tomcat-7…

    Java 2023年5月19日
    00
  • Java基础知识之Java语言概述

    Java基础知识之Java语言概述 Java语言是一门面向对象的编程语言,由Sun公司开发,后被Oracle公司收购。Java的特点表现在以下三个方面: 简单性 Java摒弃了C++的多重继承、指针、运算符重载等复杂的特性,使得Java更为简单易懂,因此Java语言入门难度较低。 面向对象 Java强调抽象和封装,支持继承和多态等特性,具有良好的扩展性和复用…

    Java 2023年5月23日
    00
  • hadoop运行java程序(jar包)并运行时动态指定参数

    运行Java程序(JAR包)是Hadoop处理数据的一部分。在本文中,将介绍如何在Hadoop上动态指定参数以运行Java程序。 步骤 1:创建Java工程 创建一个Java工程,编写Hadoop程序,并将其打包成JAR文件。 步骤 2:编写程序的入口类 在Java工程中,我们应该有一个Main类作为程序的入口。在Main类中,需要使用Hadoop提供的To…

    Java 2023年5月26日
    00
  • Spring数据库事务的实现机制讲解

    下面是”Spring数据库事务的实现机制讲解”的完整攻略: 什么是Spring数据库事务? Spring数据库事务是一种帮助开发者实现数据库操作的方式。通过配置Spring事务,将多个SQL语句封装在一个事务中,然后让这些SQL语句可以一起被提交或者回滚。 Spring数据库事务实现机制 1. Spring事务的简介 Spring事务可以通过编程式事务和声明…

    Java 2023年5月20日
    00
  • Hibernate中获取Session的两种方式代码示例

    获取 Hibernate 中的 Session 可以通过两种方式:getCurrentSession() 和 openSession()。 getCurrentSession() 方法 getCurrentSession() 方法获取的 Session 是与当前线程绑定的,使用完后会自动关闭。 示例代码如下: Session session = sessio…

    Java 2023年5月31日
    00
  • java从文件中读取数据的六种方法

    Java从文件中读取数据的六种方法 在Java应用程序中,从文件中读取数据是一个常见的操作。这篇文章将为大家介绍Java读取文件的六种方法,帮助大家学习如何读取文件数据。 方法1:使用 FileInputStream FileInputStream fileInputStream = null; try { File file = new File(&quo…

    Java 2023年5月20日
    00
  • Java如何获取指定目录文件列表

    获取指定目录文件列表是 Java 编程中常见的操作之一,可以通过 Java 的 File 类来实现。下面是获取指定目录文件列表的完整攻略: 第一步:创建 File 对象 首先需要创建一个 File 对象来表示要获取的目录。File 对象可以接受一个目录路径作为参数,例如: File directory = new File("path/to/dir…

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