第二十章 數組原理內存圖
作者:張子默
一、內存概述
內存是計算機中的重要原件,臨時存儲區域,作用是運行程序。我們編寫的程序是存放在硬盤中的,在硬盤中的程序是不會運行的,必須放進內存中才能運行,運行完畢後會清空內存。
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
}
}