首页 > 解决方案 > 如何从 Java 中的另一个类更改对象值(看起来与 Arraylist 相同)?

问题描述

我对ArrayList另一个可以更改另一个类的值的变量感到困惑。我有两个类和两个带有ArrayListandObject变量的示例。有人可以帮助我理解为什么它会有所不同,以及是否有解决方案使其具有相同的效果?

这是 ArrayList 的代码:

import java.util.List;

public class Test {
    private String name = "Fifi";
    
    void fill(List<Test> a) {
        a.add(this);
    }
}
import java.util.ArrayList;
import java.util.List;

public class B {
    private List<Test> a = new ArrayList<Test>();
    //a variable is empty

    public B() {
        // TODO Auto-generated constructor stub
        Test oa = new Test();
        oa.fill(a);// After this method is called, a variable has change with name is "FiFi"
    }

    public static void main(String[] args) {
        new B();
    }
}

然后,我有与对象变量相同的形式,但结果不一样。

public class Test {
    private String name = "Fifi";
    
    void fill(Test b) {
        b = this;
    }
}
public class B {
    private Test a;
    // so a variable is null

    public B() {
        // TODO Auto-generated constructor stub
        Test oa = new Test();
        oa.fill(a);// after fill method is called, a still null!
    }

    public static void main(String[] args) {
        new B();
    }
}

与上面的 Arraylist 和对象变量有什么不同?我不明白它是如何发生的基础知识!

标签: javaclassobjectarraylist

解决方案


ArrayListObject是两个完全不同的概念。数组列表 对象

oa.fill(a); // 调用填充方法后,仍然为空!

a为空,因为这

私人测试a;

不是对象,而是Test类的引用。所以没有内存分配给a. 声明和实例化的区别

private Test a = new Test(); //object is created

您的两个代码之间的区别:

oa此代码将类的 object( )附加Test到 List a-

public class Test {
    private String name = "Fifi";
    
    void fill(List<Test> a) {
        a.add(this);
    }
}

在这段代码中,您将一个对象()的内容分配给同一类的oa另一个对象( ) -aTest

    public B() {
        Test oa = new Test();
        oa.fill(a);
        System.out.print(a.name); //output: Fifi
    }

推荐阅读