北京Java培訓
達內北京中關村中心

010-62126400

熱門課程

北京java培訓班:如何區分Java 堆和棧的區別?

  • 時間:2020-07-09 15:33
  • 發布:北京java培訓
  • 來源:疑難解答

Java 堆和棧的區別,還傻傻分不清?下面和達內北京java培訓機構一起來看看!

堆和棧都是Java用來在RAM中存放數據的地方。

1)Java的堆是一個運行時數據區,類的對象從堆中分配空間。這些對象通過new等指令建立,通過垃圾回收器來銷毀。

2)堆的優勢是可以動態地分配內存空間,需要多少內存空間不必事先告訴編譯器,因為它是在運行時動態分配的。但缺點是,由于需要在運行時動態分配內存,所以存取速度較慢。

1)棧中主要存放一些基本數據類型的變量(byte,short,int,long,float,double,boolean,char)和對象的引用。

2)棧的優勢是,存取速度比堆快,棧數據可以共享。但缺點是,存放在棧中的數據占用多少內存空間需要在編譯時確定下來,缺乏靈活性。

舉例說明棧數據可以共享

String 可以用以下兩種方式來創建:

String str1 = new String("abc");

String str2 = "abc";

第一種使用new來創建的對象,它存放在堆中。每調用一次就創建一個新的對象。

第二種是先在棧中創建對象的引用str2,然后查找棧中有沒有存放“abc”,如果沒有,則將“abc”存放進棧,并將str2指向“abc”,如果已經有“abc”, 則直接將str2指向“abc”。

下面用代碼說明上面的理論:

public static void main(String\[\] args) {

String str1 = new String("abc");

String str2 = new String("abc");

System.out.println(str1 == str2);

}

輸出結果為:false

public static void main(String\[\] args) {

String str1 = "abc";

String str2 = "abc";

System.out.println(str1 == str2);

}

輸出結果為:true

因此,用第二種方式創建多個“abc”字符串,在內存中其實只存在一個對象而已。這種寫法有利于節省內存空間。同時還可以提高程序的運行速度,因為JVM會自動根據棧中數據的實際情況來決定是否創建新對象。

上一篇:達內北京培訓班:這5點建議,給快30歲的你
下一篇:為什么互聯網行業薪資高?哪些崗位最有前途?

馬上預約七天免費體驗課

姓名:

電話:

應屆生月入15000,大廠喜歡的開發崗該怎么學?

Java開發初級:Java新人如何玩轉JDK?

0基礎學Java參加培訓,對高薪就業有幫助嗎?

為什么互聯網行業薪資高?哪些崗位最有前途?

選擇城市和中心
江西省

貴州省

廣西省

海南省

豆奶最新版本下载