在开发中,List 是经常被使用到的对象,ArrayList是一个有序列表,今天在开发中遇到一个很易混的问题,困扰了将近2个小时,感觉真的太不应该了,记录下来,顺便给大家提个醒,下次再犯同样错误 真该拖出去枪毙五分钟了。
先贴一段代码,脑子中编译一下,看看结果是啥。
import java.util.ArrayList;
import java.util.List;
public class TestList {
public static void main(String[] args) {
List<Student> list = new ArrayList<Student>();
Student s = new Student();
for(int i = 0;i<10;i++){
s.setId(i);
s.setName("name"+i);
list.add(s);
}
for(Student c:list){
System.out.println(c.getId()+"==="+c.getName());
}
}
}
class Student{
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
很简单的代码,将对象放入list中,给对象赋值 然后打印,很基础的东西,往往是容易出错的地方。
打印结果为:
9===name9
9===name9
9===name9
9===name9
9===name9
9===name9
9===name9
9===name9
9===name9
9===name9
虽然将student对象放了10次,但是每次都是同一个对象,对象放入list中,当对象没有销毁之前 对其进行了改动,那么list中的对象也就同样做了改动,很简单的引用关系。 如果每次都new 一个对象 然后再赋值,add进list就不会出这样的问题了。
分享到:
相关推荐
- 在集合元素类上使用注解,配合使用上述的Dozer或ModelMapper库,可以实现基于注解的集合元素复制,包括集合内的对象关系复制。 6. **多对象复制** - 当需要对多个对象进行复制时,可以使用上述的工具库,如...
在Java编程语言中,上转型对象(Upcasting)是一种面向对象编程的概念,它涉及到将子类对象赋值给父类类型的引用。这种做法允许我们使用父类引用来调用子类对象的方法,从而实现多态性。在Java中,所有类都隐式地...
在Java编程中,对象之间的复制是一项常见的操作,特别是在数据传输、模型转换或者持久化存储等场景下。...而了解各种复制策略和工具,可以帮助我们更好地处理复杂的对象关系,提高程序的健壮性和效率。
在Java编程中,集合框架是核心部分之一,而List接口是集合框架的重要组成部分。当我们处理业务数据时,经常需要在不同实体类的列表之间进行转换,以满足不同的业务需求。这个压缩包文件“基于java8新特性+反射机制...
以下将详细介绍Java中List、Set与Array之间的转换方法。 1. **List与Array的转换** - **Array转List**: 如果你有一个数组,可以使用`Arrays.asList()`方法将其转换为List。例如: ```java String[] array = {...
本知识点重点讲解将List转换为List的过程,这在进行Web开发、数据处理以及与前端交互等场景中非常常见。同时,也会涉及List转换为List及list转换为JsonArray的内容。 ### List转换为List 在Java中,Bean通常指的是...
在Java编程语言中,`Collections` 类是 `java.util` 包中...在 `MySortList.java` 文件中,可能包含了关于 `Collections.sort()` 方法的具体使用示例,而 `Java.jpg` 可能是一个相关的类图或流程图,帮助理解这些概念。
在本场景中,我们需要对List中的对象进行排序,这些对象通常包含表示层级关系的属性,如父ID、子节点列表等。 接下来,我们要解决的是“树状排序”。树状排序,或称为树形排序,是指将具有树结构的数据进行排序。在...
《Java语言面向对象程序设计实验指导与习题答案》是由范玫和马俊共同编著的一本面向初学者和进阶者的Java编程书籍。这本书旨在帮助读者深入理解Java语言的面向对象特性,并通过一系列的实验指导和习题解答,提升实践...
1. **类与对象**:在Java中,类是对象的蓝图,定义了对象的属性(数据成员)和行为(方法)。对象是类的实例,具有类所定义的属性和行为。 2. **封装**:封装是OOP的基石,通过访问修饰符(如public, private, ...
7. **集合框架**:Java集合框架是存储和管理对象的重要工具,包括List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)和Map(如HashMap和TreeMap)等接口及其实现类。它们提供了丰富的操作和算法,如添加、...
在Java编程中,多层嵌套循环是一种常见的数据处理方式,尤其在处理具有层次关系的数据时,例如构建或解析父子级结构。在这种场景下,我们可能需要遍历多个层级的数据,以便进行转换、操作或者存储到数据库中。下面将...
3. **类与对象**:在Java中,类是对象的蓝图,定义了对象的属性和行为。对象是类的实例,具有类所描述的状态和行为。理解类和对象的关系,能帮助你设计出符合实际需求的软件结构。 4. **包与import**:Java使用包来...
《面向对象程序设计JAVA语言程序设计》期末考试试题及部分答案是 Java 语言程序设计的考试试题,涵盖了 Java 语言的基本概念、面向对象程序设计、异常处理、多态性、继承关系、接口、类和对象、字符串处理等方面的...
然而,在教学实践中,存在学生难以直观感受到数据结构与Java面向对象程序设计课程之间联系的问题,以及JDK中数据结构与算法实现与数据结构课程内容不匹配的问题。 为了解决这些问题,文章提出了将数据结构知识点与...
- 遍历列表中的其他节点,查找与当前节点存在父子关系的子节点,将这些子节点添加到当前节点的子节点列表中,并将子节点入栈。 4. 重复步骤3,直到栈为空。 在实现这个通用工具类时,我们需要考虑以下几点: 1. *...
Java面向对象编程是Java语言的核心特性,也是软件开发中的重要概念。这个实验项目"Java面对对象实验(项目文件)2013521"旨在深入理解和掌握面向对象编程的基本概念,为后续学习JavaEE、JavaME等高级技术打下坚实的...
1. **类与对象**:在Java中,类是对象的蓝图,定义了对象的状态(属性)和行为(方法)。源代码中可能包含了各种示例类,如学生类、教师类等,演示如何声明和实例化对象。理解类的概念是Java编程的基础,通过实例化...
#### 三、Java中的类与对象 在Java中,类是对象的模板,用于定义对象的属性和方法。对象则是类的具体实例,可以通过new关键字创建。例如: ```java public class Car { private String color; // 属性 public void...