List元素为泛型时的注意事项
最近的项目赶得非常紧,这节奏跟最近的天气一点也不搭调。
编码的过程,遇到一个关于List的小问题。
在调用List.add(E e)的时候范了一个小毛病,很自然地认为list中存储的是 E 对象的另一个实例,其实存储的只是实例的引用。
复现问题:
泛型:Shit类
 public class Shit {
     private int id;
     private String description;
     private String owner;
   getters and setters;
 }
测试类:
 public class CasualTest {
     public static void main(String[] args) {
         List<Shit> list =Lists.newArrayList();
         Shit shit = new Shit();
         shit.setId(1);
         shit.setDescription("a");
         list.add(shit);
         shit.setId(2);
         shit.setDescription("b");
         list.add(shit);
         Shit shit1 = new Shit();//这里new了一个对象
         shit1.setId(3);
         shit1.setDescription("c");
         list.add(shit1);
         shit1.setId(3);
         shit1.setDescription("c");
         list.add(shit1);
         System.out.println(JsonUtils.toJson(list));
     }
 }
看下复现的结果:
 [{"description":"b","id":2},{"$ref":"$[0]"},{"description":"c","id":3},{"$ref":"$[2]"}]
list中的对象,只打出了两个。另外两个,都是引用,分别指向了$[0]第一个元素和$[2]第三个元素。
list中只是存了一个引用,当你用这个引用修改实例的值时,所有值是这个引用的list的元素多会被修改。
List元素为泛型时的注意事项的更多相关文章
- 在学习泛型时遇到的困惑经常与func<T,U>混淆
		在学习泛型时遇到的困惑经常与func<T,U>混淆,总认为最后一个值是返回类型.现在区分一下,原来问题出在泛型委托上. C#委托的介绍(delegate.Action.Func.predi ... 
- Python:list 和 array的对比以及转换时的注意事项
		Python:list 和 array的对比以及转换时的注意事项 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-6-4 ... 
- ie10中元素超出父元素的宽度时不能自动隐藏
		(从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期2014-02-21) 今天遇到一个问题,ie10中元素超出父元素的宽度时不能自动隐藏,而其余浏览器却正常显示. 解决方法是,手动给其设 ... 
- MySQL DROP TABLE操作以及 DROP 大表时的注意事项【转】
		删表 DROP TABLE Syntax DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ... [RESTRICT | CASCAD ... 
- C#效率优化(1)-- 使用泛型时避免装箱
		本想接着上一篇详解泛型接着写一篇使用泛型时需要注意的一个性能问题,但是后来想着不如将之前的详解XX系列更正为现在的效率优化XX系列,记录在工作时遇到的一些性能优化的经验和技巧,如果有什么不足,还请大家 ... 
- SSH框架整合jar包时的注意事项
		SSH框架整合jar包时的注意事项: 在将三个框架所需的jar整合到一起后,要看一下有没有相同类型但是版本不同的jar包,如果有的话,需要把低版本的jar包删除掉,否则会报错.我这里整合的时候java ... 
- No known class method for selector 'setImage:andName:'错误分析.//删除.h与.m文件时的注意事项
		CHENYILONG Blog No known class method for selector 'setImage:andName:'错误分析.//删除.h与.m文件时的注意事项 ... 
- 在win7系统上搭建django+oracle 11g时,注意事项
		在win7系统上搭建django+oracle 11g时,注意事项[示例用的是python 2.7]: 重要:python.oracle.oracle client这三个的OS bit 一定一定要相同 ... 
- 如何去除表单元素获得焦点时的外边框:outline (轮廓)
		我们在做制作表单页面时,经常会需要消除表单元素带来的边框,这时候我们需要用到两个属性: 1.表单元素未激活状态下的边框,不实现边框: border:none; 2.表单元素获得焦点时的轮廓,隐藏轮廓: ... 
随机推荐
- <eq>标签
			链接:http://document.thinkphp.cn/manual_3_2.html#taglib <eq name="menu.id" value="1& ... 
- 49、多线程创建的三种方式之继承Thread类
			继承Thread类创建线程 在java里面,开发者可以创建线程,这样在程序执行过程中,如果CPU空闲了,就会执行线程中的内容. 使用Thread创建线程的步骤: 1.自定义一个类,继承java.lan ... 
- JS设计模式——10.门面模式
			门面模式 这是一种组织性的模式,它可以用来修改类和对象的接口,使其更便于使用.它可以让程序员过得更轻松,使他们的代码变得更容易管理. 门面模式有两个作用: 简化类的接口 消除与使用她的客户代码之间的耦 ... 
- python的新特性
			http://www.jb51.net/article/67699.htm Python中用format函数格式化字符串的用法:http://www.jb51.net/article/63672.ht ... 
- 移动端测试=== adb 无线连接手机
			无线连接(需要借助 USB 线) 除了可以通过 USB 连接设备与电脑来使用 adb,也可以通过无线连接——虽然连接过程中也有需要使用 USB 的步骤,但是连接成功之后你的设备就可以在一定范围内摆脱 ... 
- LinuxUSB驱动程序调试--009:编写应用程序---验证协议【转】
			转自:http://biancheng.dnbcw.info/linux/257411.html [1] 如何编译X86下的 uBuntu APP---非常简单: gcc -o ... 
- 对于Linux平台下C语言开发中__sync_函数的认识(转)
			reference:http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html#Atomic-Builtins A built-i ... 
- ASP.net-空白页的问题
			protected void Application_Error(object sender, EventArgs e) { ILog log = LogMan ... 
- C++如何判断大小端
			http://bbs.chinaunix.net/thread-1257205-1-1.html #include <stdio.h>#include <string.h>#i ... 
- 十三、springboot集成定时任务(Scheduling Tasks)
			定时任务(Scheduling Tasks) 在springboot创建定时任务比较简单,只需2步: 1.在程序的入口加上@EnableScheduling注解. 2.在定时方法上加@Schedule ... 
