Java对象List使用陷阱

2023-11-07

Java由一个对象List筛选或者浅复制得到的另一个对象List里面的引用和原List里的引用指向同一个地址,修改其中一个List里的共有对象时,同时会影响到两个List里存放的对象

package test;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class CodeTest {
    
    private String value;
    
    public CodeTest(String value) {
        this.value = value;
    }
    
    public String getValue() {
        return value;
    }
    
    public void setValue(String value) {
        this.value = value;
    }
    
    public static void main(String[] args) {
        /*String fileName ="aaaa.dio.doc";
        String substring = fileName.substring(fileName.lastIndexOf("."));
        System.out.println(fileName);
        System.out.println(substring);*/


        /*String s = "                  ";
        System.out.println(s.trim().isEmpty());*/
    
        List<CodeTest> list1 = new ArrayList<>();
        list1.add(new CodeTest("a"));
        list1.add(new CodeTest("b"));
        list1.add(new CodeTest("c"));
        list1.add(new CodeTest("d"));
    
        List<CodeTest> list2 = list1.stream().filter(s -> s.value.equals("a") || s.value.equals("b")).collect(Collectors.toList());
    
        System.out.println(list1);
        System.out.println(list2);
        
        System.out.println("=================================");
        for (CodeTest codeTest : list1) {
            System.out.println(codeTest.value);
        }
        System.out.println("=================================");
        for (CodeTest codeTest : list2) {
            System.out.println(codeTest.value);
        }
        System.out.println("=================================");
//        list2.set(0,"1");
//        list2.set(1,"2");
    
        
        //修改list2里面对象的属性值,list1里的对象的属性值也会改变
        for (CodeTest codeTest : list2) {
            codeTest.setValue("change");
        }
    
        for (CodeTest codeTest : list1) {
            System.out.println(codeTest.value);
        }
        System.out.println("=================================");
        for (CodeTest codeTest : list2) {
            System.out.println(codeTest.value);
        }
        System.out.println("=================================");
    
        System.out.println(list1);
        System.out.println(list2);
    }
}

运行结果:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java对象List使用陷阱 的相关文章

随机推荐

  • 银行卡编码规则及检验算法详解

    一 银行卡结构 XXXXXX XXXXXXXXXXXX X 发卡行标识代码 自定义位 校验码 根据ISO标准 银行卡长度一般在13 19位 国际上也有12位的 银联标准卡卡长度一般是在16 19位 双组织卡也有13 19位的 二 发卡行标识
  • grid - 显式网格

    显式网格布局包含 行 列 列 grid template columns page color fff grid padding 1 display grid grid gap 1px grid template rows 50px 100
  • 养生指南 4 : 睡眠 与 外因

    参考 老中医给的100条养生建议 强烈推荐 1 睡眠 1 睡觉 是养生第一要素 睡觉的时间 应该是 晚 21 00 早3 00 因为这个时间是一天的 冬季 冬季主藏 冬季不藏 春夏不长 即第 2 天没精神 早起如在寅时三点至五点 此时切忌郁
  • Python数据分析与可视化------NumPy第三方库

    目录 数据的维度 NumPy CSV文件 多维数据的存取 NumPy的便捷式文件截取 NumPy的随机数函数子库 NumPy的统计函数 NumBy的梯度函数 图像的数组表示 图像的变换 数据的维度 维度 一组数据的组织形式 一维数据 由对等
  • 1.出现需要keil突破内存限制

    出现 error L6050U The code size of this image 37186 bytes exceeds the maximum allowed for this version of the linker 是因为超出
  • openlayers绘制圆形区域,消除误差的一种方法

    我需要以某点为圆心 以某长度 单位米 为半径 在地图上绘制圆形区域 前提 地图显示 图层和数据源的创建与设置方法这里就不详细描述了 直接上关键部分 一开始 我使用如下代码实现圆形区域的绘制 绘制以坐标 1 1 为中心 200000米为半径的
  • Codeforces Round #553 (Div. 2)

    A Maxim and Biology time limit per test 1 second memory limit per test 256 megabytes input standard input output standar
  • 无法通过http://burp获取BurpSuite证书的解决方法

    为了能够对https协议的数据进行抓取必须安装BurpSuite的证书 但在下载证书的过程中出现了问题 官方和百度下载证书的方法都是在能够抓取http的状态下访问http burp下载证书 但http burp页面却加载不出来 百度了很久也
  • 【Bootstrap】Bootstrap基础导航栏(响应式导航菜单)

    Bootstrap基础导航栏 响应式导航菜单
  • 自动化测试(五):自动化测试框架的搭建和基于yaml热加载的测试用例的设计

    该部分是对自动化测试专栏前四篇的一个补充 本次参考以下文章实现一个完整的谷歌翻译接口自动化测试 1 python小脚本 Yaml配置文件动态加载 2 python做接口测试的学习记录day8 pytest自动化测试框架之热加载和断言封装 目
  • 如何自己开发一个Android APP(4)——JAVA

    资源使用 在java文件中 通过资源id完成对资源的访问 可以通过对象 getId 的方法得到组件 因为XML布局文件与java文件实际上是不互通的 也就是说我们的xml只控制外观 当你需要为某个地方作出某些设置时 java必须先获取到这个
  • vue面试面试

    MVVM model js对象data view dom模板代码 viewmodel vue实例 ViewModel负责把Model的数据同步到View 还负责把View的修改同步回Model 实现数据 视图分离 数据不会影响视图 框架优缺
  • 美国专利知识

    1 美国专利查看网站 http patft uspto gov 2 美国专利类型 Application Type APT This field contains a single digit number which indicates
  • ASP网页给服务器传参,asp.net页面与页面之间传参数值方法(post传值和get传值)

    一 利用POST传值 传值asp文件send aspx 接受asp文件receive aspx string username Ruquest Form receive 一 get方法传值 QueryString 也叫查询字符串 这种方法将
  • 计算机视觉——图像视觉显著性检测

    目录 系列文章目录 零 问题描述 一 图像显著性检测 1 定义 2 难点 二 常用评价标准和计算方法 1 综述 2 ROS曲线详述 2 1 混淆矩阵 2 2 ROC曲线简介 2 3 ROC曲线绘制及其判别标准 2 4 ROC曲线补充 三 F
  • 利用 Pytorch 加载词向量库文件

    1 示例代码 完整代码 import torch from torch nn import Embedding 载入讯飞词向量文件 word vector file Downloads tencent ailab embedding zh
  • 第四章——蛮力法

    蛮力法概述 蛮力法也称穷举法 枚举法 或暴力法 是一种简单的直接解决问题的方法 通常根据问题的描述和所涉及的概念定义 对问题所有可能的状态 结果 一一进行测试 直到找到解或将全部可能的状态都测试一遍为止 蛮力法的 力 指的是计算机的运算能力
  • 腾讯云IM即时通讯

    获取UserSig工具类 import com alibaba fastjson JSONObject import java nio charset StandardCharsets import java util Base64 imp
  • 显示本地未连接服务器ip,本地连接显示未识别怎么办

    一个朋友因为网络连接的问题要抓狂了 使用ADSL PPPOE进行宽带上网 连接的时候图标那里一直有一个圈在转 始终连接不上 将鼠标移动过去一查看 原来这里显示的是本地连接显示未识别 那么本地连接显示未识别怎么办呢 接下来大家跟着学习啦小编一
  • Java对象List使用陷阱

    Java由一个对象List筛选或者浅复制得到的另一个对象List里面的引用和原List里的引用指向同一个地址 修改其中一个List里的共有对象时 同时会影响到两个List里存放的对象 package test import java uti