如何更改java中另一个类的对象值(看起来和arraylist一样)?

d5vmydt9  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(314)

这个问题在这里已经有答案了

java是“按引用传递”还是“按值传递”(88个答案)
三小时前关门了。
我很困惑 ArrayList 另一个变量可以更改另一个类的值。我有两门课和两个例子 ArrayList 以及 Object 变量。有人能帮我理解为什么它不同,如果有一个解决办法,使它具有相同的效果?
这是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();
    }
}

然后,我得到了和object变量相同的形式,但是结果不一样。

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和object变量有什么不同?我不明白这是怎么发生的!

iqjalb3h

iqjalb3h1#

ArrayList 以及 Object 是两个完全不同的概念。阵列对象
oa.填充(a);//调用fill方法后,仍然为空! a 为空,因为
私人测试a;
不是对象而是 Test 班级。所以没有内存分配给 a . 声明和示例化的区别

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

两种代码之间的区别:
此代码正在附加对象( oa )的 Test 要列出的类 a -

public class Test {
    private String name = "Fifi";

    void fill(List<Test> a) {
        a.add(this);
    }
}

在这段代码中,你分配了一个对象的内容( oa )到另一个对象( a )同级的 Test -

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

相关问题