Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 列表中的引用对象在内容更改时更改,但未设置为NULL_Java - Fatal编程技术网

Java 列表中的引用对象在内容更改时更改,但未设置为NULL

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

我有一段代码,它向ArrayList添加了一些对象。然后,从列表中,在步骤1中,我修改了这些对象的内容——而支持对象本身也会发生变化,这是有效的。然后,在步骤2中,我从列表中将我的对象设置为NULL。列表更改-我可以看到它的元素为空,但是支持对象没有更改。为什么呢

我的期望:a、b、c设置为空

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,空);将完全删除它