一、棧Stack 和 隊列Queue 的區別
1.棧Stack 就像一個框,單出口, 先進後出
2.隊Queue 列就像排隊,雙出口,先進先出
3. 實例代碼參考
二、Java 堆Heap 和 棧 Stack的區別(Java的內存只有2種堆和棧,注意區分和數據結構和內存的區別)
1. 基本數據類型和引用變量的變量名都在棧中。
1.有哪些基本數據類型?
八大數據類型:int, short, long, byte, float, double, boolean, char
注意:String 不是基本數據類型。
2.引用變量的變量名指的什麼?
在函數中定義的一些基本類型的變量,和對象的引用變量
比如:下面代碼中的 student
Student student = new Student();
2.Java棧的內存回收處理?
Java 就在棧中爲這個變量分配內存空間,當超過變量的作用域後,Java 會自動釋放掉爲該變量分配的內存空間
2. 堆用來存放 對象和數組
1. 存放對象
比如下面的 new Student(“張三”,18);
Student student = new Student("張三",18);
2.存放數組:
比如下面 的數組 。棧Stack種儲存: arraystring 的值,爲 數組的首地址
堆儲存數組 : {“張三”,“李四”,“王五”}
String[] arrayString = {"張三","李四","王五"};
3.類的初始化,Static final都在堆中。
…
4.堆中的內存回收處理?
數組和對象本身在堆中分配,即使程序運行到使用 new 產生數組或者對象的語句所在的代碼塊之外,數組和對象本身佔據的內存不會被釋放,數組和對象在沒有引用變量指向它的時候,才變爲垃圾,不能在被使用,但仍然佔據內存空間不放,在隨後的一個不確定的時間被垃圾回收器收走(釋放掉)。
這也是 Java 比較佔內存的原因,實際上,棧中的變量指向堆內存中的變量,這就是 Java 中的指針!