关于值传递和引用传递的问题记录
目录
1. 问题概述
1.1 测试
1.2 结果
2. ArrayList和Arrays.ArrayList
1. 问题概述
最近忙着写论文很久没更新了,趁现在有时间简单记录一下最近遇到的一个坑。
对于Java中的List<>类型的对象,按我以前理解是引用传递,但有一点要注意,就是在调用方法里面如果直接将一个新的List对象赋值于该方法参数,会导致变成值传递,因为这个操作直接修改了方法参数的引用地址,无论怎么修改都无法影响到调用方法的对象。
1.1 测试
先看看下面的代码,简单来说就是通过handleList方法更新sourceList。
public static void handleList1(List<String> sourceList) {System.out.println("handleList1");List<String> tempList = new ArrayList<>();for(String item: sourceList) {if(item.equals("EEEEE")) {// can't change sourceList directlytempList.add("E");} else {tempList.add(item);}}sourceList = tempList;}public static void handleList2(List<String> sourceList) {System.out.println("handleList2");List<String> tempList = new ArrayList<>();for(String item: sourceList) {if(item.equals("EEEEE")) {// can't change sourceList directlytempList.add("E");} else {tempList.add(item);}}sourceList.clear();sourceList.addAll(tempList);}
通过以下方法测试:
public static void main(String[] args) {// 1List<String> sourceList = new ArrayList<String>(){{add("A"); add("B"); add("C"); add("D");add("EEEEE");}};handleList1(sourceList);System.out.println(sourceList);// 2sourceList = new ArrayList<String>(){{add("A"); add("B"); add("C"); add("D");add("EEEEE");}};handleList2(sourceList);System.out.println(sourceList);}
1.2 结果

上面可以发现handleList1方法并没有成功修改sourceList的值,因为重新为sourceList赋予了新的地址,永远不会改变原来地址空间的sourceList。
但其实如果idea用的是专业版的话就可以直接发现这个bug,但是当时用的社区版没提示一着急就踩坑了。

2. ArrayList和Arrays.ArrayList
顺便提一下,因为上面的要求需要修改List的内容,line26不能直接修改for循环的sourceList内容,
同时如果List是Arrays.ArrayList的实例,那么不支持add(); clear(); addAll();这些操作,
不然都会报UnsupportedOperationException。
所以如果需要将数组转成List,可以这样:
List list = new ArrayList<>(Arrays.asList("A", "B", "C"))
更多方式可以参考:List操作add,clear,addall
相关文章:
关于值传递和引用传递的问题记录
目录 1. 问题概述 1.1 测试 1.2 结果 2. ArrayList和Arrays.ArrayList 1. 问题概述 最近忙着写论文很久没更新了,趁现在有时间简单记录一下最近遇到的一个坑。 对于Java中的List<>类型的对象,按我以前理解是引用传递,但有一点要注…...
律师咨询小程序搭建流程
一、需求分析 在律师咨询小程序的开发过程中,需求分析是至关重要的一步。首先,我们需要明确小程序的定位和目标用户,了解用户的需求和痛点。在此基础上,我们需要细化功能需求,如在线咨询、案件查询、文书生成等。同时…...
怎么在uni-app中使用Vuex 深度解刨
本文深入研究Vuex,一个Vue.js状态管理库。我们将介绍创建它是为了解决的问题、其背后的核心概念、如何设置它,当然,还将在每一步中使用代码示例。 Vuex是一个由Vue团队构建的状态管理库,用于管理Vue.js应用程序中的数据。它提供了一种集中管理跨应用程序使用的数据的方式,…...
兼容iphone(ios)圆角(border-radius)不起作用的问题
一、出现场景:使用mosowe-swiper:适用于uni-app的轮播图插件,圆弧无效 ios手机会在transform的时候导致border-radius失效解决方法:在使用动画效果带transform的元素的上一级div元素的css加上下面语句: transform: rot…...
车间部署MES管理系统后有哪些变化
随着智能制造技术的飞速发展,工厂车间正经历着一场由数字化管理和智能化协调优化驱动的变革。这场变革的核心便是MES管理系统。实施MES管理系统在提升生产效率、降低成本、提高产品质量和优化资源投入方面发挥着重要作用,助力工厂实现整体运作的协作管理…...
19C进入数据库出现问号
问题情况如图所示: 解决方法: su - oracle echo "NLS_LANGAMERICAN_AMERICA.ZHS16GBK;export NLS_LANG" >> ~/.bash_profilesource ~/.bash_profileofile...
Mistral 7B 比Llama 2更好的开源大模型 (一)
Mistral 7B 简介 Mistral 7B Mistral 7B 是一个 7.3B 参数模型: 在所有基准测试中优于 Llama 2 13B在许多基准测试中优于 Llama 1 34B接近 CodeLlama 7B 的代码性能,同时保持擅长英语任务使用分组查询注意力 (GQA) 加快推理速度使用滑动窗口注意力 (SWA) 以更低的成本处…...
【JUC】三、集合的线程安全
文章目录 1、ArrayList集合线程安全问题分析2、解决方式一:Vector或synchronizedList( )3、解决方式二:CopyOnWriteArrayList 写时复制4、HashSet集合线程不安全的分析与解决5、HashMap集合线程不安全的分析与解决 1、ArrayList集合线程安全问题分析 对…...
使用 Redis 实现生成分布式全局唯一ID(使用SpringBoot环境实现)
目录 一、前言二、如何通过Redis设计一个分布式全局唯一ID生成工具2.1、使用 Redis 计数器实现2.2、使用 Redis Hash结构实现 三、通过代码实现分布式全局唯一ID工具3.1、编写获取工具3.2、测试获取工具 四、总结 一、前言 在很多项目中生成类似订单编号、用户编号等有唯一性数…...
Pytorch CUDA CPP简易教程,在Windows上操作
文章目录 前言一、使用的工具二、学习资源分享三、libtorch环境配置1.配置CUDA、nvcc、cudnn2.下载libtorch3.CLion配置libtorch4.CMake Application指定Environment variables5.测试libtorch 四、PyTorch CUDA CPP项目流程1.使用CLion结合torch extension编写可以调用cuda的C代…...
服务器怎么连接
服务器怎么连接 服务器可以通过多种方式连接,主要取决于服务器的操作系统、网络配置和连接方式等因素。 1. SSH连接:如果服务器使用的是Linux操作系统,可以通过SSH协议连接。需要使用SSH客户端工具,例如PuTTY,在登录页…...
线性代数-Python-05:矩阵的逆+LU分解
文章目录 1 矩阵的逆1.1 求解矩阵的逆 2 初等矩阵2.1 初等矩阵和可逆性 3 矩阵的LU分解3.1 LU分解的实现 1 矩阵的逆 1.1 求解矩阵的逆 def inv(A):if A.row_num() ! A.col_num():return Nonen A.row_num()"""矩阵A单位矩阵"""ls LinearSyste…...
shell实用脚本命令
1. declare declare 命令是一个非常常用的命令之一,它可以用来声明变量的类型和属性,比如变量的作用域、是否只读等等。 一、declare命令的基本用法 declare 命令可以用来声明变量,其最基本的用法如下:declare 变量名 在上面的命…...
STM32——端口复用与重映射概述与配置(HAL库)
文章目录 前言一、什么是端口复用?什么是重映射?有什么区别?二、端口复用配置 前言 本篇文章介绍了在单片机开发过程中使用的端口复用与重映射。做自我学习的简单总结,不做权威使用,参考资料为正点原子STM32F1系列精英…...
ABZ正交编码 - 异步电机常用的位置信息确定方式
什么是正交编码? ab正交编码器(又名双通道增量式编码器),用于将线性移位转换为脉冲信号。通过监控脉冲的数目和两个信号的相对相位,用户可以跟踪旋转位置、旋转方向和速度。另外,第三个通道称为索引信号&am…...
Linux学习第41天:Linux SPI 驱动实验(二):乾坤大挪移
Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 本章的思维导图如下: 二、I.MX6U SPI主机驱动分析 主机驱动一般都是由SOC厂商写好的。不作为重点需要掌握的内容。 三、SPI设备驱动编写流程 1、SP…...
黑客泄露 3500 万条 LinkedIn 用户记录
被抓取的 LinkedIn 数据库分为两部分泄露:一部分包含 500 万条用户记录,第二部分包含 3500 万条记录。 LinkedIn 数据库保存了超过 3500 万用户的个人信息,被化名 USDoD 的黑客泄露。 该数据库在臭名昭著的网络犯罪和黑客平台 Breach Forum…...
Flink SQL -- 反压
1、测试反压: 1、反压: 指的是下游消费数据的速度比上游产生数据的速度要小时会出现反压,下游导致上游的Task反压。 2、测试反压:使用的是DataGen CREATE TABLE words (word STRING ) WITH (connector datagen,rows-per-second…...
快速入门安装及使用git与svn的区别常用命令
一、导言 1、什么是svn? SVN是Subversion的简称,是一个集中式版本控制系统。与Git不同,SVN没有分布式的特性。在SVN中,项目的代码仓库位于服务器上,团队成员通过向服务器提交和获取代码来实现版本控制。SVN记录了每个…...
超详细介绍如何使用 OpenCV 和 BGS 库进行背景扣除
深入研究这些 CV 系统背后的想法,我们可以观察到,在大多数情况下,初始步骤包含背景减除 (BS),这有助于获得视频流中对象的相对粗略和快速的识别,以便对其进行进一步的精细处理。在当前的文章中,我们将介绍几种在准确性和处理时间 BS 方法方面值得注意的算法:SuBSENSE和基…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
