棧內存和堆內存

在java中,內存實際分爲棧內存和堆內存,當我們定義一個類的引用變量時,這個引用變量就放在棧了內存中,對象的變量數據實際就放在堆內存中,而棧內存中的引用變量是指向堆內存的對象的。eg:

int[] a = {1, 2, 3, 4};當我們定義一個數組引用變量a時,字符a就會儲存在棧內存中,而實際的對象1, 2, 3, 4就是催存在堆內存中,棧內存中a是指向對內存的1, 2, 3, 4的。所以如果使一個與a相同類的數組引用變量b等於a,就等於改變了棧內存中b在堆內存中的指向,所以在使用b引用元素時就等於使用a引用元素;而原本b在堆內存存儲的數據如果沒有新的引用變量指向他的話就會變成垃圾,被系統清理掉。

public class Array
{
	public static void main(String[] args)
	{
		int[] a = {1, 2, 3, 4};
		int[] b = new int[3];//堆內存中的對象是0, 0, 0

		/**
		 * 1, 2, 3, 4放置在堆內存中
		 * a, b 放置在棧內存中,且a指向堆內存中的1, 2, 3, 4
		 * 當b = a時,b放棄原來在堆內存的指向,而選擇指向堆內存的1, 2, 3, 4,b原來在堆內存指向的數據變爲垃圾
		 */

		b = a;
		for(int c: b)
		{
			System.out.println(c);
		}
	}
}
但如果是不同類的引用變量,一般是不能改變指向的,double[] d = new double[4];d是不能等於a的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章