java中的基本數據類型一定存儲在棧中嗎?


首先說明,"java中的基本數據類型一定存儲在棧中的嗎?”這句話肯定是錯誤的。

 

棧:虛擬機棧:執行java方法是分配的內存模型。方法運行分配一個棧幀用於存放局部變量表,操作數棧、動態鏈接、方法出口等信息。。局部變量表存放了編譯期可知的各種基本數據類型、對象引用類型,存放了指向實際對象的地址或者句柄位置

   下面讓我們一起來分析一下原因:

   基本數據類型是放在棧中還是放在堆中,這取決於基本類型在何處聲明,下面對數據類型在內存中的存儲問題來解釋一下:

   一:在方法中聲明的變量,即該變量是局部變量,每當程序調用方法時,系統都會為該方法建立一個方法棧,其所在方法中聲明的變量就放在方法棧中,當方法結束系統會釋放方法棧,其對應在該方法中聲明的變量隨着棧的銷毀而結束,這就局部變量只能在方法中有效的原因

      在方法中聲明的變量可以是基本類型的變量,也可以是引用類型的變量。

         (1)當聲明是基本類型的變量的時,其變量名及值(變量名及值是兩個概念)是放在方法棧中

         (2)當聲明的是引用變量時,所聲明的變量(該變量實際上是在方法中存儲的是內存地址值)是放在方法的棧中,該變量所指向的對象是放在堆類存中的。

   二:在類中聲明的變量是成員變量,也叫全局變量,放在堆中的(因為全局變量不會隨着某個方法執行結束而銷毀)。

       同樣在類中聲明的變量即可是基本類型的變量 也可是引用類型的變量

       (1)當聲明的是基本類型的變量其變量名及其值放在堆內存中的

       (2)引用類型時,其聲明的變量仍然會存儲一個內存地址值,該內存地址值指向所引用的對象。引用變量名和對應的對象仍然存儲在相應的堆中

 

 

  此外,為了反駁觀點" Java的基本數據類型都是存儲在棧的 ",我們也可以隨便舉出一個反例,例如:

      int[] array=new int[]{1,2};

      由於new了一個對象,所以new int[]{1,2}這個對象時存儲在堆中的,也就是說1,2這兩個基本數據類型是存儲在堆中,

      這也就很有效的反駁了基本數據類型一定是存儲在棧中~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM