ArrayList.add后,前面数据被覆盖的问题及解决方法

ArrayList.add后,前面数据被覆盖的问题及解决方法,第1张

ArrayList集合里存的是同一个值,有可能是同一个引用或者就是同一个值。

ArrayList<Object>list = new ArrayList<Object>()

Object obj

for (int i = 10i >0i--) {

    obj = new Object()

    // obj = anotherObj

    list.add(obj)

}

像上面一样,每次add的都是同一个引用,一个指向不同对象的引用obj

结果就是集合里所有的值都是obj,obj指向哪,集合里的值就指向哪。

将 Objec new在循环的里面。

for (int i = 10i >0i--) {

  Object obj=new Object()

      objt.set(i)

        list.add(obj)

public Class Student {

    private static String id

    private static String name

    public Student(String id, String name) {

        this.id = id

        this.name = name

    }

}

ArrayList<Student>list = new ArrayList<Student>()

Student s1 = new Student("1", "张三")

Student s2 = new Student("2", "李四")

//

list.add(s1)

list.add(s2)

//如果输出两个对象的话你会发现都是李四

//或者像这样

ArrayList<Student>list  = new ArrayList<Student>()

for (int i = 10i >0i--) {

    list.add(new Student(i, "name"))

}

//如果输出所有对象,他们的id都是1

上面是第二种情况,每次add()的虽然是不同的对象,但是结果还是被覆盖了,这是为什么呢?

****static****(Student 类中)就是这个修饰符,

让修饰的属性变为静态,

意味着该类的所有对象共享同一个属性

所以尽管集合里存的是不同的对象,但是对象的属性还是同一个值

修改其中任何一个,其他的也会“被修改”

新建对象,不可能覆盖啊,第二次执行不是0,1了吗,这不就没有覆盖了吗。

出现第一次的情况可能是你把Student类的count属性设置成static了,这样你改变一次count,所有Student实例对象的count值都变成一样的了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11365931.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存