20_數組原理內存圖

第二十章 數組原理內存圖

作者:張子默

一、內存概述

內存是計算機中的重要原件,臨時存儲區域,作用是運行程序。我們編寫的程序是存放在硬盤中的,在硬盤中的程序是不會運行的,必須放進內存中才能運行,運行完畢後會清空內存。
Java虛擬機要運行程序,必須要對內存進行空間的分配和管理。

二、Java虛擬機的內存劃分

爲了提高運算效率,就對空間進行了不同區域的劃分,因爲每一片區域都有特定的數據處理方式和內存管理方式。

  • JVM內存劃分

    在這裏插入圖片描述

三、數組在內存中的存儲

1、一個數組內存圖

public static void main(String[] args){
		int[] arr = new int[3];
		System.out.println(arr); //[I@5f150435
}

以上方法執行,輸出的結果是[I@5f150435,這是什麼呢?是數組在內存中的地址。new出來的內容,都是在堆內存中存儲的,而方法中的變量arr保存的是數組的地址。

輸出arr[0],就會輸出arr保存的內存地址中數組0索引上的元素

在這裏插入圖片描述

2、實例

public class Demo05ArrayOne {
	public static void main(String[] args) {
		int[] array = new int[3]; //動態初始化
		System.out.println(array); //地址值
		System.out.println(array[0]); // 0
		System.out.println(array[1]); // 0
		System.out.println(array[2]); // 0
		System.out.println("==========");
		
		//改變數組當中元素的內容
		array[1] = 10;
		array[2] = 20;
		System.out.println(array); //地址值
		System.out.println(array[0]); // 0
		System.out.println(array[1]); // 100
		System.out.println(array[2]); // 200
		System.out.println("==========");
	}
}

3、兩個數組內存圖

public static void main(String[] args) {
	int[] arr = new int[3];
	int[] arr2 = new int[2];
	System.out.println(arr);
	System.out.println(arr2);
}

在這裏插入圖片描述

4、實例

public class Demo07ArraySame {
	public static void main(String[] args) {
		int[] arrayA = new int[3]; //動態初始化
		System.out.println(arrayA); //地址值
		System.out.println(arrayA[0]); // 0
		System.out.println(arrayA[1]); // 0
		System.out.println(arrayA[2]); // 0
		System.out.println("==========");
		
		//改變數組當中元素的內容
		arrayA[1] = 10;
		arrayA[2] = 20;
		System.out.println(arrayA); //地址值
		System.out.println(arrayA[0]); // 0
		System.out.println(arrayA[1]); // 10
		System.out.println(arrayA[2]); // 20
		System.out.println("==========");
		
		//將arrayA數組的地址值,賦值給arrayB數組
		int[] arrayB = arrayA; //動態初始化
		System.out.println(arrayB); //地址值
		System.out.println(arrayB[0]); // 0
		System.out.println(arrayB[1]); // 10
		System.out.println(arrayB[2]); // 20
		System.out.println("==========");
		
		//改變數組當中元素的內容
		arrayB[1] = 100;
		arrayB[2] = 200;
		System.out.println(arrayB); //地址值
		System.out.println(arrayB[0]); // 0
		System.out.println(arrayB[1]); // 100
		System.out.println(arrayB[2]); // 200
	}

}

5、兩個變量指向一個數組

public static void main(String[] args) {
	// 定義數組,存儲3個元素
	int[] arr = new int[3];
	//數組索引進行賦值
	arr[0] = 5;
	arr[1] = 6;
	arr[2] = 7;
	//輸出3個索引上的元素值
	System.out.println(arr[0]);
	System.out.println(arr[1]);
	System.out.println(arr[2]);
	//定義數組變量arr2,將arr的地址賦值給arr2
	int[] arr2 = arr;
	arr2[1] = 9;
	System.out.println(arr[1]);
}

在這裏插入圖片描述

6、實例

public class Demo07ArraySame {
	public static void main(String[] args) {
		int[] arrayA = new int[3]; //動態初始化
		System.out.println(arrayA); //地址值
		System.out.println(arrayA[0]); // 0
		System.out.println(arrayA[1]); // 0
		System.out.println(arrayA[2]); // 0
		System.out.println("==========");
		
		//改變數組當中元素的內容
		arrayA[1] = 10;
		arrayA[2] = 20;
		System.out.println(arrayA); //地址值
		System.out.println(arrayA[0]); // 0
		System.out.println(arrayA[1]); // 10
		System.out.println(arrayA[2]); // 20
		System.out.println("==========");
		
		//將arrayA數組的地址值,賦值給arrayB數組
		int[] arrayB = arrayA; //動態初始化
		System.out.println(arrayB); //地址值
		System.out.println(arrayB[0]); // 0
		System.out.println(arrayB[1]); // 10
		System.out.println(arrayB[2]); // 20
		System.out.println("==========");
		
		//改變數組當中元素的內容
		arrayB[1] = 100;
		arrayB[2] = 200;
		System.out.println(arrayB); //地址值
		System.out.println(arrayB[0]); // 0
		System.out.println(arrayB[1]); // 100
		System.out.println(arrayB[2]); // 200
	}

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