java参数传递

1、传递方式

        参数传递有两种方式:值传递和引用传递。

  • 值传递:这是 Java 中默认的参数传递方式。当参数以基本数据类型(如 int、char、boolean 等))或不可变对象(如String、整数数组等)的形式传递时,使用的是值传递。在值传递中,方法内部的参数变量是方法调用时传入参数的一个副本。对参数变量的修改不会影响到方法调用时传入的实际参数。
  • 引用传递:当参数以对象的引用(如对象、数组、类的实例等)的形式传递时,使用的是引用传递。在引用传递中,方法内部的参数变量实际上是方法调用时传入参数的一个引用。对参数变量的修改会反映到方法调用时传入的实际参数上。

2、示例代码

package com.ybw.map;import com.alibaba.fastjson2.JSON;
import com.ybw.dto.UserDTO;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;import java.util.HashMap;
import java.util.Map;/*** @author weixiansheng* @version V1.0* @className MapTest* @date 2023/11/21**/
@Slf4j
public class MapTest {/*** @methodName: testMap* @return: void* @author: weixiansheng* @date: 2023/11/21**/@Testpublic void testMap() {Map<String, UserDTO> userDTOMap = new HashMap<>();setUserDTOMap(userDTOMap);log.info("testMap userDTOMap:{}", JSON.toJSONString(userDTOMap));}/*** 在上述代码中,当我们在方法内部重新赋值userDTOMap时,我们实际上是创建了一个新的Map对象,* 并将其地址复制到了原来存放userDTOMap变量地址的地方。这意味着原来的Map对象仍然存在于堆中,* 但其地址已经不再由userDTOMap变量指向了。** @param userDTOMap* @methodName: setUserDTOMap* @return: void* @author: weixiansheng* @date: 2023/11/21**/private void setUserDTOMap(Map<String, UserDTO> userDTOMap) {userDTOMap.put("1", new UserDTO(1L, "weixiansheng"));userDTOMap = Map.of("1", new UserDTO(1L, "weixiansheng"), "2", new UserDTO(2L, "weixiansheng"));log.info("setUserDTOMap userDTOMap:{}", JSON.toJSONString(userDTOMap));}
}

打印日志

[INFO ] 2023-11-21 14:02:48.579 [main] com.ybw.map.MapTest - setUserDTOMap userDTOMap:{"2":{"id":2,"name":"weixiansheng"},"1":{"id":1,"name":"weixiansheng"}}
[INFO ] 2023-11-21 14:02:48.581 [main] com.ybw.map.MapTest - testMap userDTOMap:{"1":{"id":1,"name":"weixiansheng"}}

  在setUserDTOMap我们重新对它进行了赋值,不过没有生效。

总结

        将对象引用传递给方法时,实际上传递的是对象的引用而不是对象本身。因此,如果在方法内部更改了引用,那么原始对象不会受到影响。

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

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

相关文章

【Android Jetpack】理解ViewModel

文章目录 ViewModel实现ViewModelViewModel的生命周期在Fragments间分享数据ViewModel和SavedInstanceState对比ViewModel原理ViewModel与AndroidViewModel ViewModel Android系统提供控件&#xff0c;比如Activity和Fragment&#xff0c;这些控件都是具有生命周期方法&#x…

Playcanvas后处理-辉光bloom

&#xff08;一&#xff09;Bloom介绍 Bloom&#xff08;辉光、光晕、泛光&#xff09;是一种常见的摄像机后处理&#xff08;PostProcessing&#xff09;效果&#xff0c;用于再现真实世界相机的成像伪影。这种效果会产生从图像中明亮区域边界延伸的光条纹&#xff08;或羽毛…

flink1.10袋鼠云 迁移 flink1.15原生环境 事项汇总

表DDL(平台自动生成)修改适配 1 DDL语法不通用 (袋鼠云DDL中支持给别名 DDL采用数据中台生成的模板,并把老版本DDL中的配置通过到相应参数中) 2 袋鼠云DDL支持给别名 sql中字段和DDL中字段不一致. 两种解决方案: 1 FlinkSQL别名语法和袋鼠云略不同 袋鼠云DDL: parseJson(parseJ…

Altium Designer学习笔记2

原理图的绘制 需要掌握的是系统自带原理图库元件的添加。

SQL Server - 使用 Merge 语句实现表数据之间的对比同步

在SQL server &#xff08;2008以上版本&#xff09;中当需要将一个表&#xff08;可能另一个库&#xff09;中数据同步到另一个表中时&#xff0c;可以考虑使用merge语句。 只需要提供&#xff1a; 1.目标表 &#xff08;target table&#xff09; 2.数据源表 (source table) …

[WUSTCTF 2020]level2 脱壳

这里我们发现ida打开后是有报错的 所以猜测是否有壳 所以我们去看看是否有壳 发现去壳了 然后再放到IDA中看即可

Atlassian发布最新补贴政策,Jira/Confluence迁移上云最低可至零成本

到2024年2月15日&#xff0c;Atlassian将不再提供对Jira、Confluence、Jira Service Management等Server版产品的支持。 近期&#xff0c;Atlassian推出了一项针对云产品的特殊优惠。现在从Server版迁移到云版&#xff0c;您能享受到高额补贴&#xff0c;甚至成本低至零元。立…

Odoo:行业领先的免费开源财务管理解决方案

面向现代企业的财务和会计软件 可靠关账&#xff0c;更快速、更准确地报告财务数据 Odoo ERP财务和会计软件可帮助财务主管设计、革新和理顺财务流程和运营。Odoo ERP无缝整合各种核心财务和会计功能&#xff0c;提供强大的合规管理特性&#xff0c;有助于企业改善业务绩效、提…

vue js 禁用控件一分钟,并显示倒计时

isCounting标记计时是否开始&#xff0c;remainTimeTip为显示文本&#xff0c;比如初始值设置为“获取验证码”&#xff0c;clock设置为每1秒自动调用一次&#xff0c;clearInterval(clock)会停止下一次的调用。 data(){return {remainTime:60,//禁用60秒isCounting:false,//是…

Selenium4+python被单独定义<div>的动态输入框和二级下拉框要怎么定位?

今天在做练习题的时候,发现几个问题捣鼓了好久,写下这篇来记录 问题一: 有层级的复选框无法定位到二级目录 对于这种拥有二级框的选项无法定位,也不是<select>属性. 我们查看下HTML,发现它是被单独封装在body内拥有动态属性的独立<div>,当窗口点击的时候才会触发…

十六、RabbitMQ快速入门

目录 一、在centos上下载MQ镜像 二、安装运行容器 三、登录进入MQ 1、添加一个新的用户 2、新建虚拟机 3、 为用户分配权限 四、RabbitMQ的基本概念 RabbitMQ中的几个概念: 五、常见消息模型 六、简单的消息生产与消费 1、消费者类 2、生产者类 3、基本消息队列的消…

数据库中的undo与redo的作用

undo与redo的作用 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会定期…

xpath

xpath 使用 使用 from lxml import etree或者 from lxml import htmlet etree.XML(xml) et etree.HTML(html) res et.xpath("/book") # 返回列表项目Valueet.xpath(“/book”)/表示根节点/div/a子节点用/依次表示/name/text()text()取文本/book//nick//表示标签…

手动添加扩展到composer中

如果拓展包第三方没有提供composer安装方式&#xff0c;可以将扩展包手动添加到vendor目录下 将拓展包复制到vendor文件夹下 拓展包需要配置好composer.json文件中的autoload和包里面的命名空间 配置vendor/composer/autoload_psr4.php文件 xx\\xx\\ > array($vendorDir…

Kubernetes Gateway API 攻略:解锁集群流量服务新维度!

Kubernetes Gateway API 刚刚 GA&#xff0c;旨在改进将集群服务暴露给外部的过程。这其中包括一套更标准、更强大的 API资源&#xff0c;用于管理已暴露的服务。在这篇文章中&#xff0c;我将介绍 Gateway API 资源&#xff0c;并以 Istio 为例来展示这些资源是如何关联的。通…

C语言之sizeof 和 strlen 详细介绍

C语言之sizeof 和 strlen 文章目录 C语言之sizeof 和 strlen1. sizeof 和 strlen 的比较1.1 sizeof1.2 strlen1.3 sizeof 和 strlen 的对比 2. 练习2.1.1 一维数组2.1.2 字符数组 1. sizeof 和 strlen 的比较 1.1 sizeof sizeof是C语言中的一个关键字&#xff0c;计算的是变量…

设计模式常见面试题

简单梳理下二十三种设计模式&#xff0c;在使用设计模式的时候&#xff0c;不仅要对其分类了然于胸&#xff0c;还要了解每个设计模式的应用场景、设计与实现&#xff0c;以及其优缺点。同时&#xff0c;还要能区分功能相近的设计模式&#xff0c;避免出现误用的情况。 什么是…

python -opencv形态学操作

python -opencv形态学操作 1.服饰和膨胀 1.服饰和膨胀 opencv 腐蚀通过cv2.erode实现&#xff0c;膨胀通过cv2.dilate实现&#xff0c;看一下下面代码&#xff1a; from ctypes.wintypes import SIZE from multiprocessing.pool import IMapUnorderedIterator import cv2 i…

76基于matlab的免疫算法求解配送中心选址问题,根据配送地址确定最佳配送中心地址位置。

基于matlab的免疫算法求解配送中心选址问题&#xff0c;根据配送地址确定最佳配送中心地址位置。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 76matlab免疫算法配送中心选址 (xiaohongshu.com)

git 将本地已有的一个项目上传到新建的git仓库的方法

将本地已有的一个非git项目上传到新建的git仓库的方法一共有两种 一、 克隆拷贝 第一种方法比较简单&#xff0c;直接用把远程仓库拉到本地&#xff0c;然后再把自己本地的项目拷贝到仓库中去。然后push到远程仓库上去即可。此方法适用于本地项目不是一个git仓库的情况。 具…