关于值传递和引用传递的问题记录

目录

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

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

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

相关文章

软件工程分析报告05体系结构说明书——基于Paddle的肝脏CT影像分割

基于Paddle的肝脏CT影像分割系统的体系结构说明书 目录 HIPO图 H图 Ipo图 软件结构图 面向数据流的体系结构设计图 程序流程图 S图 用PDL语言描述的伪代码 HIPO图 H图 Ipo图 软件结构图 面向数据流的体系结构设计图 程序流程图 S图 PAD图 用PDL语言描述的伪代码 (1)…

【Transformer从零开始代码实现 pytoch版】(六)模型基本测试运行

模型基本测试及运行 &#xff08;1&#xff09;构建数据生成器 def data_generator(V, batch, num_batch):""" 用于随机生成copy任务的数据:param V: 随机生成数字的最大值1:param batch: 每次输送给模型更新一次参数的数据量:param num_batch: 输送多少次完成…

自媒体项目详述

总体框架 本项目主要着手于获取最新最热新闻资讯&#xff0c;以微服务构架为技术基础搭建校内仅供学生教师使用的校园新媒体app。以文章为主线的核心业务主要分为如下子模块。自媒体模块实现用户创建功能、文章发布功能、素材管理功能。app端用户模块实现文章搜索、文章点赞、…

【论文阅读】CTAB-GAN: Effective Table Data Synthesizing

论文地址&#xff1a;[2102.08369] CTAB-GAN: Effective Table Data Synthesizing (arxiv.org) 介绍 虽然数据共享对于知识发展至关重要&#xff0c;但遗憾的是&#xff0c;隐私问题和严格的监管&#xff08;例如欧洲通用数据保护条例 GDPR&#xff09;限制了其充分发挥作用。…

PySide/PYQT如何用Qt Designer和代码来设置文字属性,如何设置文字颜色?

文章目录 📖 介绍 📖🏡 环境 🏡📒 实现方法 📒📝 Qt Designer设置📝 代码📖 介绍 📖 本人介绍如何使用Qt Designer/代码来设置字体属性(包含字体颜色) 🏡 环境 🏡 本文使用Pyside6来进行演示📒 实现方法 📒 📝 Qt Designer设置 首先打开Qt De…

爱心代码--C语言特供(可直接复制,亲测有效)

情人节到了&#xff0c;作为一名程序员&#xff0c;我们拥有属于我们的浪漫。 这里我总结了几种常见的爱心代码&#xff0c;简单易上手。 一.这是一种最为常见的爱心代码 #include<stdio.h> #include<Windows.h>int main() {float x, y, a;for (y 1.5; y > -1.…

手摸手入门Springboot+Grafana10.2接收JSON

JSON&#xff08;JavaScript Object Notation, JS对象简谱&#xff09;是一种轻量级的数据交换格式。它基于 ECMAScript&#xff08;European Computer Manufacturers Association, 欧洲计算机协会制定的js规范&#xff09;的一个子集&#xff0c;采用完全独立于编程语言的文本…

面试?看完这篇就够了-深入分析从点击应用图标到应用界面展示

作者&#xff1a;GeeJoe 从点击桌面图标到应用界面展示 从桌面点击图标到应用界面第一帧绘制出来&#xff0c;整个流程涉及的过程复杂&#xff0c;为了便于理解&#xff0c;这里将整个流程分为四个阶段&#xff1a;应用进程启动阶段、应用进程初始化阶段、Activity 启动阶段、…

【JVM】Java内存溢出分析(堆溢出、栈溢出、方法区溢出、直接内存溢出)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化&#xff0c;文章内容兼具广度、深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于…

Golang 中的 Context 包

简介 今天&#xff0c;我们将讨论 Go 编程中非常重要的一个主题&#xff1a;context 包。如果你现在觉得它很令人困惑&#xff0c;不用担心 — 在本文结束时&#xff0c;你将像专家一样处理 context&#xff01; 想象一下&#xff0c;你在一个主题公园&#xff0c;兴奋地准备…

界面控件DevExtreme图表和仪表(v23.1) - 新功能(Angular,React,Vue,jQuery)

本文将为大家总结下DevExtreme在v23.1版本中发布的一些与图表和仪表盘相关的功能。 DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#…

2023年【汽车驾驶员(中级)】免费试题及汽车驾驶员(中级)考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年【汽车驾驶员&#xff08;中级&#xff09;】免费试题及汽车驾驶员&#xff08;中级&#xff09;考试试卷&#xff0c;包含汽车驾驶员&#xff08;中级&#xff09;免费试题答案和解析及汽车驾驶员&#xff08;…