zoukankan      html  css  js  c++  java
  • java中List的add方法添加对象时都是最后的一条记录

    list中添加对象

     1 import java.util.ArrayList;
     2 import java.util.List;
     3 public class ListTest{
     4     public static void main(String [] args)
     5     {
     6         Cat cat1=new Cat("hello");
     7         Cat cat2=new Cat("java");
     8         Cat cat3=new Cat("world");
     9         List<Cat> catList=new ArrayList<>();
    10         catList.add(cat1);
    11         catList.add(cat2);
    12         catList.add(cat3);
    13 
    14         Cat cat4=new Cat();
    15         List<Cat> newcatList=new ArrayList<>();
    16         for(int j=0;j<catList.size();j++){
    17             cat4.setterName(catList.get(j).getterName()==null?"":catList.get(j).getterName());
    18             newcatList.add(cat4);
    19             System.out.println("NO"+j+". address in memory"+newcatList.get(j));
    20         }
    21         for(int i=0;i<catList.size();i++)
    22         {
    23             System.out.println("when define the Class Cat outside the foreach");
    24             System.out.print(newcatList.get(i).name);
    25             System.out.println();
    26         }
    27     }
    28 }
    29 
    30 class Cat{
    31     String name;
    32     Cat(){
    33         
    34     }
    35     Cat(String name){
    36         this.name=name;
    37     }
    38     public void setterName(String name){
    39         this.name =name;
    40     }
    41     public String getterName(){
    42         return this.name;
    43     }
    44 }

    运行上诉代码,可以看到每次加入到list中的都是同一个对象的地址。

    查看源代码

    我们传递给add方法的是猫类的引用,所以传的是一个内存地址,在for循环外部定义一个对象的引用,在for循环内我们没有改变过引用的指向,所以添加到list中的就是同一个对象的地址,如果希望传递不同的对象,则需要在for循环内部声明并创建新的猫类对象即可

  • 相关阅读:
    以《淘宝网》为例,描绘质量属性的六个常见属性场景
    架构漫谈读后感
    软件体系架构课下作业01
    架构之美阅读笔记06
    架构之美阅读笔记05
    架构之美阅读笔记04
    架构之美阅读笔记03
    架构之美阅读笔记02
    架构之美阅读笔记01
    学习进度15
  • 原文地址:https://www.cnblogs.com/raychou1995/p/10065918.html
Copyright © 2011-2022 走看看