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,型別這一塊屬於抽象和具體硬體平衡的一種結果。基本上參考了過去幾十年主流處理器架構支援的...