欢迎使用CSDN-markdown编辑器
来源:互联网 发布:2D动画软件 编辑:程序博客网 时间:2024/06/05 20:03
定义了一个Student类,里面有name,age两个属性。将三个不同Student对象存入ArrayList中,出现最后输出结果一样的问题。
package blog;import java.awt.List;import java.util.ArrayList;import java.util.Scanner;public class Test02 {public static void main(String[] args) { //定义Student类型的集合 ArrayList<Student> array = new ArrayList<Student>(); //定义Student对象 Student s = new Student(); //定义键盘录入对象 Scanner sc = new Scanner(System.in);//往集合里填入个学生数据 for(int i=0;i<3;i++){ String name; int age; System.out.println("请输入姓名:"); name = sc.nextLine(); System.out.println("请输入年龄:"); age = Integer.parseInt(sc.nextLine()); s.setName(name); s.setAge(age); array.add(s); } //集合遍历 for(int x=0;x<array.size();i++){ System.out.println("姓名"+array.get(i).getName() + "----年龄" + array.get(i).getAge()); } }
运行结果
这里从结果可以看出来,都是我最后输入那个学生信息的结果,这是为什么呢。原因是,我们将Student 对象定义在循环外面,每次循环重新对同一个Student对象赋值,在内存中ArrayList三个位置都指向同一个Student对象,在Student对象内容的改变时,那么ArrayLIst里面装的值也发生改变,为了便于理解我画一张图。
图片中可以说明前两次存储的数据都被第三次替代,但是ArrayList中指向的都是一块内存,而不是三个所以会出现最后出现的都是第三个数据也就是name:cnj age:23。
所以我们需要将创建学生对象的语句放到循环中去,这样就会创建三个学生对象,并且集合中不同的索引会指向不同的内存。这时候内存是
这样的结果就是正确的
第一次图示内存模型,说的有问题欢迎指出!
阅读全文
0 0
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 源代码jar包中中文注释乱码
- java map遍历
- AngularJS 实现简单购物车
- Android开发问题日记
- 数据中心进水了怎么办?数据中心如何防洪?
- 欢迎使用CSDN-markdown编辑器
- hdu 2189 悼念512汶川大地震遇难同胞——来生一起走
- 衡量数据的离散程度
- Group Anagrams
- ubunu下显卡驱动,CUDA安装教程
- 简单的数位dp练习
- Rhyme/ Eclipse 新建类快捷键设置
- Halcon--OCR遇到的问题
- 深度学习超参数简单理解------>learning rate,weight decay和momentum