Java - 设置字段是否分配另一个内存?

时间:2014-09-02 02:01:47

标签: java

我的代码看起来像下面的代码。

public class Controller {
    public void test(){
        Model1 model1 = new Model1();
        Test test = new Test(model1);

    }
}

public class Test {
    private Model1 model1;

    public Test(Model1 model1) {
        this.model1 = model1;//this line
    }

    public Model1 getModel1() {
        return model1;
    }

    public void setModel1(Model1 model1) {
        this.model1 = model1;
    }

}
public class Model1 {
    private String field1;
    private String field2;
    public String getField1() {
        return field1;
    }
    public void setField1(String field1) {
        this.field1 = field1;
    }
    public String getField2() {
        return field2;
    }
    public void setField2(String field2) {
        this.field2 = field2;
    }

}

我只是想知道,在这段代码中实际创建了多少Model1? 另一个问题是这条线是通过引用传递的并且确实通过了 通过引用是好记忆?

3 个答案:

答案 0 :(得分:3)

不,分配给字段不会分配内存。

只有在(直接或间接)调用构造函数时才会创建对象。

  

另一个问题是这一行是通过引用传递的并且确实通过了   通过引用是好记忆?

从技术上讲,Java中的所有内容都是按值传递的。

但是,对于Objects,该值是对Object的引用(不是其内容的副本)。

因此,就内存布局而言,传递一个对象就像传递long一样。

答案 1 :(得分:2)

内存中只有一个对象:

Model1 model1 = new Model1();

变量model1是对该对象的引用。

在构造函数

public Test(Model1 model1) {
    this.model1 = model1;//this line
}

您将在内存中有另一个对同一对象的引用。

答案 2 :(得分:0)

您只创建了一个Model类的对象。基本上,您只能使用运算符new创建对象。

在java中,无论类型如何,对象始终都按值传递。对于非基本类型(对象),您只能通过引用访问。因此,在您的情况下,您将按值传递引用。

通过引用传递对象在内存方面是很好的,因为你只创建另一个指针,它占用4-8个字节之间的某个位置。