• 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循环内部声明并创建新的猫类对象即可

  • 相关阅读:
    leetcode 买卖股票的最佳时机3
    leetcode 买卖股票的最佳时机Ⅱ
    leetcode 最长有效括号
    C++中的%lld和%I64d区别
    Ural 1095 Nikifor 3 思维+同余性质的利用
    博弈基础
    ural 1091. Tmutarakan Exams
    容斥原理
    一些易错的地方
    codeforces911D Inversion Counting 求逆序数+小trick
  • 原文地址:https://www.cnblogs.com/raychou1995/p/10065918.html
Copyright © 2020-2023  润新知