Java 内存模型中的局部变量和对象是什么?

Java 内存模型中的局部变量和对象是什么?,java,Java,下面是我的一节课。在这个类中,堆中存储的变量是什么,java内存模型的线程堆栈中存储的变量是什么。我知道局部变量存储在堆栈中,对象存储在堆中。但我需要特定班级的解释 class School { public int id =1; public Student student=new Student();; public void method(Student st, int f ){ Student stud = new Student()

下面是我的一节课。在这个类中,堆中存储的变量是什么,java内存模型的线程堆栈中存储的变量是什么。我知道局部变量存储在堆栈中,对象存储在堆中。但我需要特定班级的解释

class School {

     public int id =1;

     public Student student=new Student();;

     public void method(Student st, int f ){

        Student stud = new Student();
        int fees = 100;
    }

}

谢谢

学生钉
是对对象的引用,而不是对象。引用在堆栈上,对象在堆上

Student stud = new Student();
        ^            ^
reference on stack   object on heap

注意:使用Escape Analysis,也可以将对象放在堆栈上,尽管这是一种您通常不需要知道正在发生的优化。

您陈述了两个可以轻松应用于给定代码的事实。你的家庭作业对你来说有那么难吗?我投票结束这个问题,因为回答问题所需的两件事都在问题中陈述了。嗨,我实际上对什么是局部变量和对象感到困惑。我认为方法中的对象也是局部变量。但在内存模型中,这些对象存储在堆中。太可能了。谢谢彼得·劳瑞。这对我很有帮助。我还有另一个疑问,如果stud.id=5,请告诉我;那么它将存储在哪里?@Robin
stud
是堆栈上的一个引用,
id
是堆上对象中的一个字段。嗨,Peter Lawrey,谢谢你的帮助,我还有一个疑问,如果你在一个方法中创建了4个具有不同引用的新对象。这将在堆中创建4个新对象还是1个对象?@Robin如果您使用
new
4次,您将创建4个对象。