踩坑一 List中所有元素指向同一个地址内存
ArrayList中的每一个元素存储的实际上是对象引用(之前在公司写代码的时候,做过类似下面的事),假如按照下面的方式使用ArrayList,则最后list中存储的元素都相同且都是最后一个元素,原因是list中所有的元素都指向同一块内存。
@Test
public void test1(){
List<Person> list = new ArrayList<>(16);
Person p = new Person();
for(int i = 0; i < 10; i++){
p.setName("test"+i);
p.setAge(i);
list.add(p);
}
System.out.println(list);
}
结果所有list中的元素都指向同一个Person实例
[Person{name='test9', age=9}, Person{name='test9', age=9}, ...,Person{name='test9', age=9}, Person{name='test9', age=9}]
踩坑二 List中存储了一个元素null
这个坑出现了两次,一次是使用stream之后collect转为list,但是结果为List[null],另外一次就是使用Mybatis查询数据库返回的结果为List[null];
- 使用stream之后collect转为list结果为List[null]
stream通过流映射出list中为null的值,转为为list,此时就会出现List中有null的值。@Test public void testStream(){ List<Person> list = Arrays.asList(new Person("cc"), new Person("abc")); List<Long> collect = list.stream().map(Person: