java的基本型別的成員變數在棧還是堆?

時間 2021-06-01 21:34:37

1樓:Intopass

區域性變數在stack中,包括基本型別變數和引用。

成員變數在heap中,包括基本型別變數和引用。

引用中儲存的是指向head的位址。

說到引用型別時,要把引用自身和heap中的物件區分開來。你完全可以宣告乙個引用賦值為null,那麼就不指向heap中的物件了。

2樓:愛諳夜令

先說結論,放在堆中

只要是成員變數,所在的類被例項化,不管是不是基礎型別都會放在堆中

第乙個結論就是錯的

基本資料型別是放在棧中還是放在堆中,這取決於基本型別宣告的位置。

第一種: 在方法中宣告的變數,即該變數是區域性變數,每當程式呼叫方法時,系統都會為該方法建立乙個方法棧,其所在方法中宣告的變數就放在方法棧中,當方法結束系統會釋放方法棧,其對應在該方法中宣告的變數隨著棧的銷毀而結束,這就區域性變數只能在方法中有效的原因

(1)當宣告是基本型別的變數的時,其變數名及值(變數名及值是兩個概念)是放在方法棧中

(2)當宣告的是引用變數時,所宣告的變數(該變數實際上是在方法中儲存的是記憶體位址值)是放在方法的棧中,該變數所指向的物件是放在堆類存中的。

第二種在類中宣告的變數是成員變數(全域性變數),放在堆中

1 宣告的是基本型別的變數,其變數名及其值放在堆記憶體中

2. 宣告的是引用型別時,其宣告的變數仍然會儲存乙個記憶體位址值,該記憶體位址值指向所引用的物件。引用變數名和對應的物件仍然儲存在相應的堆中

記住乙個原則即可:方法體中的引用變數和基本型別的變數都在棧上,其他都在堆上

javascript中,基本型別的變數的賦值語句會在記憶體中產生兩個副本嗎?

唐靜鑫 JS的基本型別是存在棧中的,而且每個基本型別都是單獨儲存在記憶體的不同位址中。所以在日常的開發中,你會發現基本型別的賦值並不會相互影響。 賀師俊 只要保證符合 ECMAScript 規範規定的語義,記憶體裡是幾份是無所謂的。而且就算是兩份,通常你也看不出來。在現代JS引擎中,對字串有各種優化...

java基本型別是原子性的,多執行緒時是否還需要宣告volatile來保證可見性?

哲學家888 這種問題,你肯定會得到互相矛盾的答案,不知道該信哪個。最正確的答案在JVM specification 裡,自己去看。當然這題還算簡單,所以你也可以信一下我。Volatile 確實主要是保證可見性,但它也確實額外有原子性的保證。Long 和 double 的讀寫在JVM specifi...

LLVM 的基本型別是如何設計的

陸明非 一開始是有sign unsigned的,後來去了,資訊放在opcode上,opcode有signed和unsigned,這樣基本上和硬體一致了. saturnman 我前一段時間略翻了一遍llvm的ref,型別這一塊屬於抽象和具體硬體平衡的一種結果。基本上參考了過去幾十年主流處理器架構支援的...