`
yuelangyc
  • 浏览: 454648 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java中关于List 与对象的关系

 
阅读更多
        在开发中,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就不会出这样的问题了。
分享到:
评论

相关推荐

    java不同对象及集合的多次复制

    - 在集合元素类上使用注解,配合使用上述的Dozer或ModelMapper库,可以实现基于注解的集合元素复制,包括集合内的对象关系复制。 6. **多对象复制** - 当需要对多个对象进行复制时,可以使用上述的工具库,如...

    Java 中的上转型对象 使用

    在Java编程语言中,上转型对象(Upcasting)是一种面向对象编程的概念,它涉及到将子类对象赋值给父类类型的引用。这种做法允许我们使用父类引用来调用子类对象的方法,从而实现多态性。在Java中,所有类都隐式地...

    java不同对象之间及集合的复制

    在Java编程中,对象之间的复制是一项常见的操作,特别是在数据传输、模型转换或者持久化存储等场景下。...而了解各种复制策略和工具,可以帮助我们更好地处理复杂的对象关系,提高程序的健壮性和效率。

    基于java8新特性+反射机制实现list不同实体类互转.zip

    在Java编程中,集合框架是核心部分之一,而List接口是集合框架的重要组成部分。当我们处理业务数据时,经常需要在不同实体类的列表之间进行转换,以满足不同的业务需求。这个压缩包文件“基于java8新特性+反射机制...

    java List、Set与Array之间的相互转换

    以下将详细介绍Java中List、Set与Array之间的转换方法。 1. **List与Array的转换** - **Array转List**: 如果你有一个数组,可以使用`Arrays.asList()`方法将其转换为List。例如: ```java String[] array = {...

    List转换为List

    本知识点重点讲解将List转换为List的过程,这在进行Web开发、数据处理以及与前端交互等场景中非常常见。同时,也会涉及List转换为List及list转换为JsonArray的内容。 ### List转换为List 在Java中,Bean通常指的是...

    java 使用Collections类对List的排序操作

    在Java编程语言中,`Collections` 类是 `java.util` 包中...在 `MySortList.java` 文件中,可能包含了关于 `Collections.sort()` 方法的具体使用示例,而 `Java.jpg` 可能是一个相关的类图或流程图,帮助理解这些概念。

    list集合树状排序-java

    在本场景中,我们需要对List中的对象进行排序,这些对象通常包含表示层级关系的属性,如父ID、子节点列表等。 接下来,我们要解决的是“树状排序”。树状排序,或称为树形排序,是指将具有树结构的数据进行排序。在...

    Java语言面向对象程序设计实验指导与习题答案

    《Java语言面向对象程序设计实验指导与习题答案》是由范玫和马俊共同编著的一本面向初学者和进阶者的Java编程书籍。这本书旨在帮助读者深入理解Java语言的面向对象特性,并通过一系列的实验指导和习题解答,提升实践...

    JAVA面向对象程序设计(期末考试试题及答案).zip

    1. **类与对象**:在Java中,类是对象的蓝图,定义了对象的属性(数据成员)和行为(方法)。对象是类的实例,具有类所定义的属性和行为。 2. **封装**:封装是OOP的基石,通过访问修饰符(如public, private, ...

    JAVA 面向对象资料

    7. **集合框架**:Java集合框架是存储和管理对象的重要工具,包括List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)和Map(如HashMap和TreeMap)等接口及其实现类。它们提供了丰富的操作和算法,如添加、...

    java实现多层嵌套循环参数转换

    在Java编程中,多层嵌套循环是一种常见的数据处理方式,尤其在处理具有层次关系的数据时,例如构建或解析父子级结构。在这种场景下,我们可能需要遍历多个层级的数据,以便进行转换、操作或者存储到数据库中。下面将...

    Java语言与面向对象程序设计(第2版)

    3. **类与对象**:在Java中,类是对象的蓝图,定义了对象的属性和行为。对象是类的实例,具有类所描述的状态和行为。理解类和对象的关系,能帮助你设计出符合实际需求的软件结构。 4. **包与import**:Java使用包来...

    《面向对象程序设计JAVA语言程序设计》期末考试试题及部分答案

    《面向对象程序设计JAVA语言程序设计》期末考试试题及部分答案是 Java 语言程序设计的考试试题,涵盖了 Java 语言的基本概念、面向对象程序设计、异常处理、多态性、继承关系、接口、类和对象、字符串处理等方面的...

    数据结构与Java面向对象程序设计课程之间的有效衔接.pdf

    然而,在教学实践中,存在学生难以直观感受到数据结构与Java面向对象程序设计课程之间联系的问题,以及JDK中数据结构与算法实现与数据结构课程内容不匹配的问题。 为了解决这些问题,文章提出了将数据结构知识点与...

    list转树状结构通用工具类

    - 遍历列表中的其他节点,查找与当前节点存在父子关系的子节点,将这些子节点添加到当前节点的子节点列表中,并将子节点入栈。 4. 重复步骤3,直到栈为空。 在实现这个通用工具类时,我们需要考虑以下几点: 1. *...

    Java面对对象实验(项目文件)2013521

    Java面向对象编程是Java语言的核心特性,也是软件开发中的重要概念。这个实验项目"Java面对对象实验(项目文件)2013521"旨在深入理解和掌握面向对象编程的基本概念,为后续学习JavaEE、JavaME等高级技术打下坚实的...

    《Java面向对象程序设计》课本例子源代码

    1. **类与对象**:在Java中,类是对象的蓝图,定义了对象的状态(属性)和行为(方法)。源代码中可能包含了各种示例类,如学生类、教师类等,演示如何声明和实例化对象。理解类的概念是Java编程的基础,通过实例化...

    JAVA面向对象编程_孙卫琴.pdf

    #### 三、Java中的类与对象 在Java中,类是对象的模板,用于定义对象的属性和方法。对象则是类的具体实例,可以通过new关键字创建。例如: ```java public class Car { private String color; // 属性 public void...

Global site tag (gtag.js) - Google Analytics