记录项目开发中 一次有趣的debug经历

本来是在做单元测试的,但是发现如下代码 有问题..

ProductCategory p = new ProductCategory();
for (int i = 1; i <= 5; i++) {
p.setCreateTime(new Date());
p.setPriority(i);
p.setShopId((long)(i));
p.setProductCategoryName("测试店铺种类"+(i+3));
list.add(p);
}

打印list里面对象的ProductCategoryName

发现如下

测试店铺种类8
测试店铺种类8
测试店铺种类8
测试店铺种类8
测试店铺种类8

我甚至还以为是ArrayList的add函数会去重 (人工智障),看了一下源码

public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}

发现没什么不妥。

多测试了几下 发现 list 每次增加对象的时候 list是单纯把相应index赋值为对象。

因此我上面对象 看似存了5次,但其实,最后打印的时候 打印的是同一个对象, 即最后一次的修改信息

所以有 5个测试店铺种类8

正确写法

每次new一个新的对象 加入到list中

for (int i = 1; i <= 5; i++) {
p = new ProductCategory(null,(long)i,"test"+i+10,i,new Date());
//p.setCreateTime(new Date());
//p.setPriority(i);
//p.setShopId((long)(i));
//p.setProductCategoryName("测试店铺种类"+(i+3));
list.add(p);
}

感悟

本身那么创建一个对象,目的是为了减少内存开销

但是这样做的结果就是list中存储的对象都是用一个

特此标注一下 谨防以后再犯错

SSM项目问题中遇到 ArrayList添加元素的问题的更多相关文章

  1. SSM项目问题中遇到 GET请求中有中文的情况

    GET传参有中文的情况 特别 由于准备春招,所以希望各位看客方便的话,能去github上面帮我Star一下项目 https://github.com/Draymonders/Campus-Shop 问 ...

  2. SSM项目开发中的实体定义以及MySQL表格设计

    话不多说,下面表格是项目开发中用到的实体集以及表格Name 实体创建     表格创建 Area 区域 Area 实体 areaId areaName priority createTime last ...

  3. SSM项目 单元测试中 注入bean 空指针异常

    ##特别 由于准备春招,所以希望各位看客方便的话,能去github上面帮我Star一下项目https://github.com/Draymonders/Campus-Shop java.lang.Nu ...

  4. 黑马SSM项目练习中的Oracle操作

  5. 当你的SSM项目中的springmvc.xml发生第一行错误解决方案

    当你新建了一个SSM项目,你复制网上的xml文件来配置或者你下载了一个SSM项目打开发现xml文件错误,打开是第一行报错的时候你是不是很懵逼 或者是这样 总之就是xml文件中<?xml vers ...

  6. ssm项目中遇到微信用户名称带有表情,插入失败问题

    ssm项目中遇到微信用户名称带有表情,插入失败问题 问题 Mysql的utf8编码最多3个字节,而Emoji表情或者某些特殊字符是4个字节. 因此会导致带有表情的昵称插入数据库时出错. 解决方法 一. ...

  7. Java归去来第4集:java实战之Eclipse中创建Maven类型的SSM项目

    一.前言 如果还不了解剧情,请返回第3集的剧情          Java归去来第3集:Eclipse中给动态模块升级 二.在Eclipse中创建Maven类型的SSM项目 2.1:SSM简介 SSM ...

  8. idea ssm项目出现日志中文乱码,封装的json中的msg字段中文乱码(但是json封装的bean中的字段不乱码)等其他各种项目下的中文乱码解决方案

    开头划重点!(敲黑板):rebuild和mvn package的循环往复好几次的操作是解决这个问题的最主要的方法! 经过多次试验,发现这样做就可以正常显示中文了 我说为什么有时候乱码,有时候中文正常, ...

  9. java:Conllection中的List,ArrayList添加元素,删除元素,输出元素

    java:Conllection中的List,ArrayList添加元素,删除元素,输出元素 //为list接口实例化 List<String> addlist = new ArrayLi ...

随机推荐

  1. Python 1.安装

    Python是一种开源语言,有很多第三方库. 1. Python3 及相关组件下载及安装 a. Python3下载:https://www.python.org/downloads/->点击以下 ...

  2. 缓存 Memached

    https://github.com/enyim/EnyimMemcached http://www.newasp.net/soft/63735.html#downloaded/ http://blo ...

  3. python 修改xml文档 ing

    原xml文件 <?xml version="1.0" encoding="utf-8"?> <catalog> <maxid> ...

  4. numpy高级应用

    reshape重塑数组 ravel 拉平数组 concatenate 最一般化的连接,沿一条轴连接一组数组 # print(np.concatenate([arr1,arr2],axis = 0)) ...

  5. python深拷贝和浅拷贝的区别

    首先深拷贝和浅拷贝都是对象的拷贝,都会生成一个看起来相同的对象,他们本质的区别是拷贝出来的对象的地址是否和原对象一样,也就是地址的复制还是值的复制的区别. 什么是可变对象,什么是不可变对象: 可变对象 ...

  6. Django框架----Form组件

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  7. ECharts + Jquery 做大屏展示

    HTML <!doctype html> <html> <head> <meta charset="utf-8"> <meta ...

  8. 将GPS获得的UTC时间转换成本地时间的方法(转)

    源: 将GPS获得的UTC时间转换成本地时间的方法 参考: gps时转换为utc时间方法

  9. scrapy 自定义图片路径保存,并存到数据库中

    scrapy中有个自带的pipeline工具,ImagesPipeline,可以专门用来储存图片到本地. 但默认储存地址无法配置,所以我们需要写一个自己的pipeline用于储存图片. 先分析一下我们 ...

  10. php+js 防止被抓包篡改数据,数据签名校验

    签名密钥,这个是自己生成的,需要客户端+服务端一致. <?php /** * 获取签名 * @param $data 提交的数据 * @param $key 安全密钥 * @return boo ...