Java复习总结之快速区分值传递和引用传递

article/2025/9/13 0:04:40

引言

为了搞清楚值传递和引用传递的区别,查阅了许多资料,加以自身理解,做出本篇博客用于记录。

概念

  • 值传递:指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
  • 引用传递:指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

误区

  • 错误理解一:通过传递的内容区分,如果是个值,就是值传递。如果是个引用,就是引用传递。
  • 错误理解二:Java是引用传递。
  • 错误理解三:传递的参数如果是普通类型,那就是值传递,如果是对象,那就是引用传递。

举例

实例1

public class TestOne {public static void main(String[] args) {int num1 = 10;int num2 = 20;swap(num1, num2);System.out.println("num1 = " + num1);System.out.println("num2 = " + num2);}public static void swap(int a, int b) {int temp = a;a = b;b = temp;System.out.println("a = " + a);System.out.println("b = " + b);}
}

输出:
在这里插入图片描述
为什么swap输出的值进行了交换,而main输出的却没交换?

1、首先,我们都知道,对于基本数据类型来说,使用的是值传递。即
t=a;a=b;b=t; 这种情况。
2、但在函数方法中,即实参传递给形参这种情况下,首先把实参复制了一份,并复制给形参。也就是得到的形参是实参的备份
3、通过对复制出来的备份进行值的交换,并不会影响原来的数值。这也就说明了为什么swap输出的值进行了交换,而main输出的却没交换。

实例2

public class TestTwo {public static void main(String[] args) {Student t1 = new Student("张三", 18);Student t2 = new Student("李四", 19);swap(t1, t2);System.out.println(t1);System.out.println(t2);}private static void swap(Student t1, Student t2) {Student t = t1;t1=t2;t2=t;System.out.println("t1:"+t1);System.out.println("t2:"+t2);}
}
class Student {String name;int age;public Student(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Test{" +"name='" + name + '\'' +", age=" + age +'}';}
}

输出:
在这里插入图片描述

原因同实例1,只不过本实例是将实参的地址复制了一份,并赋值给形参,然后进行交换,使其改变指向。
但是,注意: 这并不是引用传递,在Java里只能叫传递了对象的引用,本质上是传递了对象的引用(地址)的副本,这也算值传递。

若将交换函数改成如下代码,则成功进行交换

    private static void swap(Student t1, Student t2) {Student t = new Student("流星",20);t.name=t1.name;t.age = t1.age;t1.name= t2.name;t1.age= t2.age;t2.name= t.name;t2.age = t.age;}

总结

1、Java 没有引用传递
2、Java 传递对象 确实是传递对象的引用。更确切的说是传递的对象引用的副本。
3、Java传递的是引用的副本,而不是引用本身,所以引用没有传递,所以这个不叫引用传递。

附:参考资料

1、为什么说Java中只有值传递
2、Java只有值传递


http://chatgpt.dhexx.cn/article/aY44WBsK.shtml

相关文章

华为应聘进展状态码解析(附加性格测试攻略)

多方查找咨询终于终于看到了自己的状态码,总结一下~ 性格测试攻略: https://blog.csdn.net/guomutian911/article/details/48915301 https://blog.csdn.net/twc829/article/details/51226358 https://blog.csdn.net/twc829/article/details/51226247 第三…

华为OD机试2023 最新最全备考攻略助你轻松上岸

【华为OD机试真题 2022&2023】真题目录 点这里 【华为OD机试真题】信号发射和接收 &试读& 点这里 【华为OD机试真题】租车骑绿道 &试读& 点这里 什么是华为OD 华为OD是Outsourcing Dispacth模式,是华为和外企德科联合招聘的简称。目前华为大多…

idea 怎么导入maven项目

1、打开一个现有的IntelliJ IDEA工程,点击菜单的“File”->“new”->“Module from Existing Sources”。 更详细请点击:http://yayihouse.com/yayishuwu/chapter/1826

IntelliJ IDEA如何导入Gradle项目

https://blog.csdn.net/wangdong5678999/article/details/70255451 IntelliJ IDEA如何导入Gradle项目 栋先生 2017-04-20 10:14:03 95942 收藏 分类专栏: 其他 文章标签: idea intellij idea gradle 版权 最近学习Gradle,本文来重点介绍…

杂记——16.idea中导入maven项目

这篇文章我们来讲一下如何从Gitee上拉取项目,并将该项目导入到idea中 目录 1.拉取项目 2.idea导入项目 3.更改相关的配置 3.1更改maven仓库 3.2更改数据库的连接池 1.拉取项目 第一步:找到相关的项目地址 如图所示,在Gitee上找到相关的…

idea项目导入eclipse中步骤

1、打开eclipse,右键import 找到需要导入的项目 2、重新配置tomcat,已经配置好了建议移除后重新添加, window-preference 3、项目上右键-debug AS-发现没有 debug on server,这是没有转成web项目 项目右键-properties 配置好后会出…

idea与eclipse项目相互导入方式

目录 idea项目往eclipse中导入 idea项目导出到桌面 idea项目导入到工程中 idea项目迁徙到eclipse 第一种导入方式: 第二种导入方式: 第三种导入方式: eclipse项目往idea中导入 idea项目往eclipse中导入 idea项目导出到桌面 直…

idea中导入maven项目并运行

当我们从网上下载人家的maven项目该怎样导入并运行呢,请看如下步骤。 File->New->Project from Existing Source 选择maven项目下的pom.xml文件 File -> Project Structure 填写编译输出路径 6. 如果右边的某些项是红色的,点击右边的maven进行…

IDEA中导入Maven工程或项目

IDEA中导入Maven工程或项目 本文简单讲述了IDEA中导入Maven工程或项目。为了减轻读者压力笔者将 IDEA 相关应用技巧分解成了多篇文章置于主页 IDEA 专栏,若本文没有帮助到您,请去主页 IDEA 专栏检索吧 😏。 文章目录 IDEA中导入Maven工程或项…

使用IDEA导入SpringBoot项目

有时候会拿到别人现成的 springboot 项目,而不是从头自己做一个。 这个时候,就需要用导入的方式来 import 这么一个项目了。 1.IDEA 导入 SpringBoot 项目办法: 1)菜单 -> File -> New -> Project from Existing Sourc…

Intellij IDEA 导入 eclipse web 项目详细操作

Intellij IDEA 导入 eclipse web 项目详细操作 第一步:准备工具我用的是 IntelliJ IDEA 2017.1(64) 这个版本的,在eclipse中找到我之前写skye_cnmy(非Maven),skye_client(Maven)的项目导入。 第二步:在Intellij IDEA File–>New–>Pr…

IDEA导入本地项目

1.文件-New—-Model from Existing Sources 2.选中需要导入的项目 3、选择maven文件选项,从外部模型导入模块。 Idea本地项目部署路径 IDEA不会把你的项目部署到你的Tomcat安装目录,它会在操作系统盘的用户目录下新建一个目录,这个目录一般是…

idea如何import_导入项目

今天"炸药"问我idea如何导入项目: 先close project 再到开始界面import,然后一直next就可以了。 具体操作和注意事项 特别注意: >>> 开始导入项目前,注意,删掉别人电脑的idea配置和class&#xf…

Idea导入项目详解

1.点击Import Project选择项目所在目录 2.Import Project选项区别: 1)如果选择Create project from existing sources选项, 则你只能导入使用idea创建的项目源码 2)如果选择Import project from external model,则你可以导入Eclip…

IDEA导入项目后如何运行

IDEA导入项目后如何运行 过程 开头导入简单就是 import 然后选择文件夹 导入之后对Tomcat的配置,注意正文来了!小菜鸟看图: 上图完成之后,再点“”——tomcat——local—— 下面配Artifact 和其他 ( jar包&#x…

IDEA导入项目

IDEA导入项目 1.先将其解压 2.打开IDEA 选择File–>Open 3.找到刚才解压的文件夹下的文件 选中后点击OK 4.窗口的选择 这里用New Window(新窗口) 5.展开项目 点击Project 6.跟新依赖 点击pom.xml文件 点击一下更新依赖 7.代码测试 打开main\java\com\Demo1和test\jav…

如何在IntelliJ IDEA 中导入别人写好的项目

首先要查看要导入项目的位置在哪(也就是查看文件的属性),记住文件所在的位置(可以先用手机拍下来) 然后打开IntelliJ IDEA在File中找到Open 双击进入 之后进入Open File or Project中,然后一步一步按照自己…

带你认识 M1、UID、CUID、FUID、UFUID

[IC卡类型]带你认识 M1、UID、CUID、FUID、UFUID luck-cheng 2019-02-26 10:15:59 59848 收藏 30 分类专栏: 冷知识 文章标签: ICIC卡m1uidcuid 普通IC卡,0扇区不可以修改,其他扇区可反复擦写,我们使用的电梯卡、门…

RFID第一期——各种IC卡ID卡详解

博客地址:https://lmark.cc/ 起因 放假闲来无事,在B站冲浪,看到有人在讨论IC卡,我在这方面刚好还是有这么一点了解,就拿MF1卡给别人举了个例子,然后MF1卡就被开除出IC卡籍了。 有点气,但是仔细…

CUID卡写入错误数据被锁死——入坑NFC的一段经历

最开始想到做NFC是还在学校上自习的时候。 学校有种氛围很好的自习室,每个位置都是一个小隔间,小隔间里还有小灯和插座以及网线口。但是需要插卡取电。(对就是用很普通的那种校园卡插进去就有电了) 这个校园卡是NFC卡。但是学校很…