Java 列表中的引用对象在内容更改时更改,但未设置为NULL
我有一段代码,它向ArrayList添加了一些对象。然后,从列表中,在步骤1中,我修改了这些对象的内容——而支持对象本身也会发生变化,这是有效的。然后,在步骤2中,我从列表中将我的对象设置为NULL。列表更改-我可以看到它的元素为空,但是支持对象没有更改。为什么呢 我的期望:a、b、c设置为空Java 列表中的引用对象在内容更改时更改,但未设置为NULL,java,Java,我有一段代码,它向ArrayList添加了一些对象。然后,从列表中,在步骤1中,我修改了这些对象的内容——而支持对象本身也会发生变化,这是有效的。然后,在步骤2中,我从列表中将我的对象设置为NULL。列表更改-我可以看到它的元素为空,但是支持对象没有更改。为什么呢 我的期望:a、b、c设置为空 public class Test { static class Student { String name; int age; public Student(String n
public class Test {
static class Student
{
String name;
int age;
public Student(String name, int age) { this.name = name; this.age = age; };
public String getName() { return name; }
public int getAge() { return age; }
public void setName(String name) { this.name = name; }
public void setAge(int age) { this.age = age; }
}
public static void main(String[] args)
{
Student a = new Student("John", 20);
Student b = new Student("Mary", 21);
Student c = new Student("Bill", 22);
ArrayList<Student> students = new ArrayList<Student>();
students.add(a);
students.add(b);
students.add(c);
// STEP 1: Changing contents from list: THIS WORKS - Referenced objs change (a, b, c)
for (int i = 0; i < students.size(); i++)
students.get(i).setName("NEW NAME");
// STEP 2: Setting to null from list: DOES NOT WORK - Referenced objs do NOT change (a, b, c)
for (int i = 0; i < students.size(); i++)
students.set(i, null);
}
公共类测试{
静态班学生
{
字符串名;
智力年龄;
公立学生(字符串名称,int-age){this.name=name;this.age=age;};
公共字符串getName(){return name;}
public int getAge(){return age;}
public void setName(字符串名){this.name=name;}
public void setAge(int age){this.age=age;}
}
公共静态void main(字符串[]args)
{
学生a=新生(“约翰”,20岁);
学生b=新生(“玛丽”,21岁);
学生c=新生(“比尔”,22);
ArrayList students=新ArrayList();
学生。加上(a);
学生。加上(b);
学生。加上(c);
//步骤1:更改列表中的内容:此工作-引用objs更改(a、b、c)
对于(int i=0;i
数组列表仅保存对对象的引用。因此,当您将引用设置为null时,它不会删除备份对象。
试着阅读这篇关于java中如何引用数据的文章。是的,这就是引用的工作原理。你期望发生什么?你读过“期望”吗在顶部?我需要a,b,c为NULL。我是瞎子,抱歉:-)并解释你的引用发生了什么。只需将arraylist指定为NULL。为什么要这么痛苦。但是我该如何将我的备份对象设置为NULL?这就是我需要做的。@geneb。你别无选择,只能一个接一个地执行:
a=NULL;b=NULL;c=NULL;
CT只有在垃圾回收器找不到更多引用时才会被删除。因此,如果您在arraylist中将所有内容设置为null,然后将a、b和c设置为null,则对象将被删除。您也可以尝试不保存a、b和c,直接将它们添加到arraylist。如students.add(new Student(“John”,20));,现在如果您使用students.set(0,空);将完全删除它