2017-03-29 104 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

相關問題