2017-03-29 61 views
-4

我有一个类给出如下。在这个类中,要存储在堆中的变量是什么以及要存储在Java存储器模型的Thread堆栈中的变量是什么。我知道局部变量存储在堆栈中,而对象存储在堆中。但我需要给定的课程解释。什么是局部变量和内存模型中的对象?

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; 
    } 

} 

感谢

+2

您陈述了两个可以轻松应用于给定代码的事实。你的家庭作业*对你来说很难吗? – f1sh

+0

我投票结束这个问题作为题外话,因为回答这些问题需要两件事情在问题中陈述。 – f1sh

+0

嗨,我实际上与什么是局部变量和对象混淆。我在想方法内的对象也是一个局部变量。但在内存模型中,这些对象存储在堆中。如何可能。 – Robin

回答

0

Student stud参考到一个对象,而不是一个对象。该引用位于堆栈上,该对象位于堆上。

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

注:使用逃逸分析,物体可以被放置在栈上为好,虽然这是你一般不需要知道正在发生的优化。

+0

感谢Peter Lawrey对我非常有帮助。我有另一个怀疑请告诉我 if stud.id = 5; 然后它将存储在哪里? – Robin

+0

@Robin'stud'是堆栈中的引用,'id'是堆中对象的字段。 –

+0

嗨,彼得劳里,感谢您的帮助,我还有一个疑问,如果已经创建了4个新的对象与一个方法内的不同引用。这是否会在堆或1对象中创建4个新对象? – Robin

相关问题