【Java】理解java传参总是采用值传递/按值调用

news2025/1/10 10:12:59

参考《Java核心技术卷Ⅰ》

按值调用

Java所有的方法传参都是按值调用,方法得到的是所有参数值的一个拷贝

方法参数的类型

方法参数共有两种类型

  • 基本数据类型(数字、布尔值)
  • 对象引用

一个内部方法不可能基本数据类型,但能通过对象引用能够修改对象的内容。
如下代码所示

  public static void main(String[] args) {
      Employee employee = new Employee(100);
      System.out.println(employee.getSalary());
      addSalary(employee);
      System.out.println(employee.getSalary());
  }

  public static void addSalary(Employee x){
      x.raiseSalary(200);
  }

输出结果

在这里插入图片描述
解释:方法得到的是对象引用(从某种角度来说可以理解为指针,但严谨来说不是指针)的拷贝,对象引用及其他的拷贝同时引用同一个对象。

对象采用的不是引用调用!!!!

  • 很多人认为Java传递对象时采用的是引用调用,实际上并不对。
  • 对象采用的也是值调用,只不过传递的是引用值的一个拷贝,所以仍然是值调用
  • 为了更好的理解,下面有一个反例证明

编写了一个交换两个雇员对象的方法

   public static void swap(Employee x,Employee y){
       Employee temp = x;
       x = y;
       y= temp;
   }

如果Java采用的是引用调用,那么这个方法能够交互数据的效果

  Employee a = new Employee("aaaa");
  Employee b = new Employee("bbbb");
  swap(a,b);

但方法没改变存在变量a,b中的对象引用,swap中的x和y被初始化为两个对象引用的拷贝,swap方法交换的是x,y变量中存储的引用(也可以理解为指向的对象)。最终方法结束时x和y被丢弃了,白费力气。
实际上,对象引用是按值传递的。

为了更更好理解,用图说明上面方法的调用及对象引用交换的过程

  • 调用方法前
    在这里插入图片描述
  • 初始化swap方法(刚进入swap方法)
    在这里插入图片描述
  • 执行方法后,方法销毁前。注意x和y对象引用的变化
    在这里插入图片描述
  • 执行方法完,方法销毁。和初始时一样,白费力气。
    在这里插入图片描述

总结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/760594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt6 Qt Quick UI Prototype学习QML第一篇

Qt6 Qt Quick UI原型学习QML第一篇 开始创建项目Qt Quick UI原型简介.qmlproject文件举例Window平台小例子运行效果QML语法 了解语法 开始创建项目 创建一个具有QML入口点的Qt Quick 2 UI项目。要使用它,您需要设置一个QML运行时环境,例如gmlscene。 仅当…

学C的第二十六天【指针的进阶(二)】

相关代码gitee自取:C语言学习日记: 加油努力 (gitee.com) 接上期: 学C的第二十五天【指针的进阶(一)】_高高的胖子的博客-CSDN博客 6 . 函数指针数组 (1). 含义: 函数指针数组 是一个数组&a…

CSDN 周赛 63 期

CSDN 周赛 63 期 参赛体验63期周赛题目题目名称:小玉家的电费题目名称:收件邮箱题目名称:饿龙咆哮-逃离城堡题目名称:寻找宝藏山小结参赛体验 这次是最近难得的四个编程题的比赛了,可惜出了一个骗分题。 然后,今天早上进入考试,还好几次,连进都进不去 嗯,最后是开着…

开源代码分享(7)—考虑电动汽车可调度潜力的充电站两阶段市场投标策略(附matlab代码)

[1]詹祥澎,杨军,韩思宁等.考虑电动汽车可调度潜力的充电站两阶段市场投标策略[J].电力系统自动化,2021,45(10):86-96. 摘要:在电力市场环境下,充电站优化投标策略能降低电力成本,甚至通过售电获取收益。文中考 虑了电动汽车成为柔性储荷资源的潜力&#…

android 下载源码 一路踩坑

python 从 2.0 升级到3.0 从官网下载 pyhon3.0 安装器,然后更改配置 # Setting PATH for Python 3.8# The original version is saved in .bash_profile.pysaveexport PATH"/Library/Frameworks/Python.framework/Versions/3.11/bin:$PATH"alias python"/Libr…

h5真机调试之ios和Android和vconsole

目录 1:h5真机调试之Android01:安卓端 小米11开启开发者模式02:Android edge 2:h5真机调试之ios1:iOS Safari 3:真机链接本地项目 之 Android ( 重点 )3-1 vconsole的安装与使用 (…

计算机服务器中了360后缀勒索病毒怎么办,勒索病毒解密数据恢复

计算机服务器被360后缀勒索病毒攻击,会给企业的正常生产运转带来极大麻烦,最近,我们收到很多企业的求助,企业的服务器被360后缀勒索病毒攻击。360后缀勒索病毒是BeijingCrypt勒索家族的一种病毒,该病毒通过远程桌面攻击…

57、mysql执行计划怎么看

mysql执行计划怎么看 执行计划就是sql的执行查询的顺序,以及如何使用索引查询,返回的结果集的行数 EXPLAIN SELECT * from A where X? and Y?1、id: 是一个有顺序的编号,是查询的顺序号,有几个 select 就显示几行。id的顺序是…

[java安全]CommonsCollections1(LazyMap)

文章目录 【java安全】CommonsCollections1(LazyMap)前言LazyMap如何创建LazyMap对象?如何调用LazyMap的get()方法?如何触发AnnotationInvocationHandler#invoke()方法?POC总结参考 【java安全】CommonsCollections1(LazyMap) 前言 前面我们…

索尼ILCE-7SM3覆盖部分恢复案例

ILCE-7SM3,算是索尼的经典之作,目前市场占用率相当高。下边这个案例就是格式化后又拍摄了不少素材导致覆盖产生的典型情况。 故障存储:120G SD卡 故障现象: 拍摄素材后备份数据,设备交付其他人使用,结果发现少备份一条比较大的…

【grasshopper】【犀流堂】【算法】Anemone雨水径流模拟-笔记

文章目录 Anemone雨水路径模拟available options可用选项grasshopper面切线几何原理 案例1:surface地形1. 拾取地形曲面surface2. 曲面上根据divide surface划分点points3.将曲面上的划分点用surface closest point投影到曲面上4.align plane旋转平面x轴与世界Z夹角…

git 工具使用--分支管理

git 工具使用–分支管理 文章目录 git 工具使用--分支管理理解分支创建分支切换分支合并分支删除分支合并冲突分支管理策略分支策略bug分支删除临时分支总结 理解分支 分支管理是Git的杀手级功能之一。分支:就是科幻中的平行宇宙,当你正在电脑面前学习C…

7.15-7.16枚举题目精讲

枚举 A - TogetherB - Fractions Again? A - Together 题目描述 题意分析 题意:给出n个数,可以对每一个数做三种操作a,a1,a-1,求所有操作完成后出现次数最多的数的个数。 分析:对于每个数枚举三种操作后的值&#xf…

神经网络初识-以MINST数据集和CIFAR10数据集为例

文章目录 1 什么是神经网络1.1 神经元模型1.2 感知机1.3 多层神经网络1.4 为什么要使用神经网络 2 全连接神经网络2.1 简介2.2 梯度下降2.2 反向传播2.3 代码实现 3 卷积神经网络3.1 简介3.2 代码实现 总结 1 什么是神经网络 人工神经网络(artificial neural netwo…

【论文精读】Vis-MVSNet: Visibility-aware Multi-view Stereo Network

今天属于是重读经典了,这是一篇发表在BMVC2020上的文章,试图解决MVS中可见性的问题。该文章最近在拓展之后被发表在了IJCV上。本文的解读是基于扩展之后的IJCV版本,期刊的版本内容更加详细一点。 文章链接:BMVC2020版本和IJCV版本…

【电子学会】2023年05月图形化四级 -- 绘制同心圆

绘制同心圆 1. 准备工作 (1)保留小猫角色; (2)背景为默认白色。 2. 功能实现 (1)点击绿旗,小猫询问“请问绘制几个同心圆?”; (2)…

044、TiDB特性_PlacementPolicy

Placement Rules in SQL之前 跨地域部署的集群,无法本地访问无法根据业务隔离资源难以按照业务登记配置资源和副本数 Placement Rules in SQL之后 跨地域部署的集群,支持本地访问根据业务隔离资源按照业务等级配置资源和副本数 配置 labels 设置 Ti…

这个怎么弄?电脑没有d3dx9_43.dll?

在使用某些电脑软件或游戏时,遇到这样的提示:找不到d3dx9_43.dll,无法继续执行代码。这个问题比较常见,很多人不知道该怎么解决。如果你也遇到这个问题,不要着急。本文将详细介绍如何解决找不到d3dx9_43.dll无法继续执…

计算机网络基础第四章

一、网络层概述 1.1 网络层功能概述 主要任务是把分组从源端传到目的端,为分组交换网上的不同主机提供通信服务。网络层传输单位是数据报。 功能一:路由选择与分组转发(最佳路径)功能二:异构网络互联功能三&#xf…

23年测试岗面试,高频自动化测试面试题(付答案)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 面试题1&#xff…