Java-设置字段是否分配其他内存?

Java-设置字段是否分配其他内存?,java,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.mod

我有一个代码,看起来像下面的代码

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?
另一个问题是这行是否通过引用传递,是否通过了

按引用在内存中是否良好?

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

对象仅在(直接或间接)调用构造函数时创建

另一个问题是这行是否通过引用传递,是否通过了 通过引用是好的记忆吗

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

但是,对于对象,此值是对对象的引用(不是其内容的副本)


因此,就内存布局而言,传递对象与传递长代码是一样的。

否,分配给字段并不分配内存

对象仅在(直接或间接)调用构造函数时创建

另一个问题是这行是否通过引用传递,是否通过了 通过引用是好的记忆吗

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

但是,对于对象,此值是对对象的引用(不是其内容的副本)


因此,就内存布局而言,传递对象与传递长的对象一样。

内存中只有一个对象,如下所示:

Model1 model1 = new Model1();
变量
model1
是对该对象的引用

关于构造函数

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

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

内存中只有一个对象,通过以下行:

Model1 model1 = new Model1();
变量
model1
是对该对象的引用

关于构造函数

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

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

您只创建了一个类模型的对象。基本上,您只能使用操作符
new
创建对象

在java中,对象总是按值传递,而不管其类型如何。对于非基本类型(对象),您只能通过引用进行访问。因此,在您的例子中,您是按值传递引用


通过引用传递对象在内存方面是很好的,因为您只需要创建另一个指针,它需要4-8个字节

您只创建了类模型的一个对象。基本上,您只能使用操作符
new
创建对象

在java中,对象总是按值传递,而不管其类型如何。对于非基本类型(对象),您只能通过引用进行访问。因此,在您的例子中,您是按值传递引用


通过引用传递对象在内存方面是很好的,因为您只需要创建另一个指针,它需要4-8个字节

简单规则1:一般来说,只有新建的对象才能创建新对象。简单规则2:赋值和传递参数都不会创建对象的副本/克隆/副本。简单规则1:一般来说,只有new创建新对象。简单规则2:赋值和传递参数都不会创建对象的副本/克隆/副本。