堆和棧是Java資料結構裡非常重要的概念,本文較為詳細的分析了二者之間的差異。供大家參考。具體如下:
Java的堆是一個運行時資料區,類別的(物件從中分配空間。這些物件透過new、newarray、anewarray和multianewarray等指令建立,它們不需要程式碼來明確的釋放。堆是由垃圾回收來負責的,堆的優勢是可以動態地分配記憶體大小,生存期也不必事先告訴編譯器,因為它是在運行時動態分配記憶體的,Java的垃圾收集器會自動收走這些不再使用的資料。是,存在堆疊中的資料大小與生存期必須是確定的,缺乏彈性。 。會在棧中創建一個變數為a的引用,然後查找棧中是否有3這個值,如果沒找到,就將3存放進來,然後將a指向3。引用變數後,因為在棧中已經有3這個值,便將b直接指向3。器會重新搜尋堆疊中是否有4值,如果沒有,則將4存放進來,並令a指向4;如果已經有了,則直接將a指向這個位址。值。 ,它有利於節省空間。兩種的形式來創建,第一種是用new()來新建物件的,它會在存放於堆中。建立一個對String類別的物件參考變數str,然後尋找堆疊中有沒有存放"abc",如果沒有,則將"abc"存放進棧,並令str指向」abc”,如果已經有」abc” 則直接令str指向「abc」。 。
String str = new String("abc"); String str = "abc";
可以看出str1和str2是指向同一個物件的。
String str1 = "abc"; String str2 = "abc"; System.out.println(str1==str2); //true