int size = list.size();

Integer existIndex = -1;

for (int index = 0; index < size; index++) {

Photo photo = list.get(index);

// 确保不会出现多个主图:如果已经找到了主图,把后面的都设置为“非主图”,防止前端验证失败,出现多个主图的情况

if (existIndex != -1) {

photo.setCover(0);

// list.set(index,photo);

}

Integer c = photo.getCover();

// 找到了主图

if (c != null && c.equals(1)) {

existIndex = index;

}

}

上周五的时候,修改集合中的1个元素,获得第N对象,修改对象的属性,这个时候list中的对象属性就更改了,但是,在循环结束之后,发现list中的元素没有修改,又恢复原状了。必须通过list.set(index,photo); 才保证符合预期。

很奇怪,难道list.get,再修改不可行?

周末写了几个集合list的例子,发现都可以正常修改。

import java.util.ArrayList;

import java.util.List;

//测试,修改Java集合中的元素的属性

public class ListTest {

public static void main(String[] args) {

List list1 = buildList();

list1.get(0).setName("name1");

list1.get(0).setAge(1);

System.out.println(list1.get(0));

List list2 = buildList();

User user2 = list2.get(0);

user2.setName("name2");

user2.setAge(2);

System.out.println(list2.get(0));

for (User user : list2) {

user.setName("name3");

user.setAge(3);

}

System.out.println(list2.get(0));

updateList(list2);

System.out.println(list2.get(0));

}

private static void updateList(List list2) {

System.out.println(list2.get(0));

if (true) {

for (User user : list2) {

user.setName("name4");

user.setAge(4);

}

System.out.println(list2.get(0));

}

System.out.println(list2.get(0));

}

public static List buildList() {

List list = new ArrayList();

User user = new User();

user.setName("name");

list.add(user);

return list;

}

}

class User {

private String name;

private Integer age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

@Override

public String toString() {

return "User [name=" + name + ", age=" + age + "]";

}

}

通过例子可以看出,list修改方式没有问题。但是,为什么项目中的代码有问题呢?

今天是周一,再次debug,发现去掉list.set(index,photo); 结果是正确的。

这样我就搞不明白,上周五的代码问题呢。

无法复现问题,就只能“到此为止”了~

java奇怪的问题_一个奇怪的Java集合问题相关推荐

  1. java 语言 写字板_一个简单的java语言写字板.docx

    一个简单的java语言写字板.docx 一个简单的JAVA语言写字板一.需求分析1.需求分析:现在网络上各种文档编辑器数不胜数.功能也是应有尽有,有能改变字体的,有可以改变字体颜色的,但是,这些软件有 ...

  2. java程序样例_一个完整的java程序示例

    一个完整的java程序示例 2020-08-15 05:22 阅读数 74 第一个java程序 package mypack; //相当于一个目录 public class HelloWorld{ p ...

  3. java单机应用程序_一个简单的java桌面应用:单机版IFTTT

    1.项目背景: ifttt是"if this then that"的缩写,事实上是让你的网络行为能够引发连锁反应.让你使用更为方便.ifttt旨在帮助人们利用各网站的开放API,将 ...

  4. java @valid 密码不一致_一个成熟的Java项目如何优雅地处理异常

    (一)概述 异常处理是一个系统最重要的环节,当一个项目变得很大的时候,异常处理和日志系统能让你快速定位到问题.对于用户或者接口调用者而言,优雅的异常处理可以让调用者快速知道问题所在.本文将介绍如何优雅 ...

  5. 5年java程序员述职报告_一个5年Java程序员的年终总结,献给还在迷茫中的你

    我越来越担心我作为一个Java程序员的未来. 恍然间,发现自己在这个行业里已经摸爬滚打了五年了,原以为自己就凭已有的项目经验和工作经历怎么着也应该算得上是一个业内比较资历的人士了,但是今年在换工作的过 ...

  6. 网易 java社招面试_一个妹子网易Java岗社招面试经历分享

    博客群发软件--用 Windows Live Writer完美发布新浪网易blogcnbl 博客群发软件--用 Windows Live Writer完美发布新浪.网易.blogcn.blogbus. ...

  7. java jai create 方法_使用JAI扩展Java Image的功能

    Java Image功能一直都在增强,但是向磁盘写一个图像文件或者返回一个PNG或JPEG依然比较难实现.但是我们可以使用Java Advanced Imaging(JAI)API来解决这个问题.JA ...

  8. Java入门1.2.3—一个老鸟的Java学习心得

    Java入门1.2.3-一个老鸟的Java学习心得 基本信息 作者: 臧萌    出版社:清华大学出版社 ISBN:9787302217831 上架时间:2010-3-30 出版日期:2010 年3月 ...

  9. java string最大长度_一个Java字符串中到底有多少个字符?

    作者:鸟窝 依照Java的文档, Java中的字符内部是以UTF-16编码方式表示的,最小值是 (0),最大值是(65535), 也就是一个字符以2个字节来表示,难道Java最多只能表示 65535个 ...

最新文章

  1. vue 去除路由时候的#
  2. Projects(子查询、连接,分组,聚合)
  3. docker命令解析
  4. js实现复制html页面
  5. 修改GDAL库支持RPC像方改正模型
  6. 前端能改变session吗_编程真的能改变思维方式吗?「渡一教育」
  7. 转:zTree树控件入门之checkbox:如何动态设置节点的checkbox选择框启用与禁用状态(chkDisabled)...
  8. XposedBridgeApi-54
  9. 实践与交流:采取“硬刷”方式完美激活Windows 7旗舰版的具体方法步骤(图文详解教程)...
  10. 漫威 DC 英雄综合实力排位,这人秒杀灭霸
  11. 开心网android客户端,开心网Android客户端V3.8.1升级评测
  12. 简述Android手机常用的设备ID
  13. 名帖78 苏轼 小楷《金刚经》
  14. OC Protocol(待续)
  15. svn造成桌面图标显示问号的处理办法
  16. InvokeRequired and Invoke
  17. 数据结构与算法—链表常见面试题(持续更新)
  18. Blo Tx Pending
  19. 建模simulink - xpc自定义模块设置
  20. ubuntu16.04系统制作本地apt源

热门文章

  1. pandas中使用rolling.corr函数计算两个时间序列数据列之间的滚动相关性(Rolling correlations)、例如,计算两种商品销售额之间的3个月的滚动相关性
  2. R语言使用lm构建线性回归模型、并将目标变量对数化(log10)实战:可视化模型预测输出与实际值对比图、可视化模型的残差、模型预测中系统误差的一个例子 、自定义函数计算R方指标和均方根误差RMSE
  3. R语言生成组合图并保存实战:实际上只保存了最后一个图问题、ggsave生成组合图并保存(保存完整组合图)
  4. R语言neuralnet包构建神经网络模型:基于乳腺癌数据集
  5. pandas使用to_sql方法将dataframe注册为数据库表进行数据整合和数据清洗并不对比SQL操作和dataframe操作
  6. 密度聚类、密度聚类过程、OPTICS算法
  7. 词频-逆向文件频率TF-IDF(term frequency–inverse document frequency)是什么?有什么用处?
  8. 高斯过程及其家族往事
  9. FSWD_3_JavaScriptAdvance
  10. The impact of third generation genomic technologies on plant genome assembly 第三代基因组技术对植物基因组组装的影响