---
# System prepended metadata

title: 8/18 K速記

---

# 8/18 K速記

* 變數初始值 或設定為null 在java中 實際值為0
	* 參考變數(arr[0]) 初始為null
	* 部分(arr)會顯示為 型態+記憶體位置
```java=
Scanner sc = new Scanner(System.in); //在heap配置了Scanner，位址存於stack內的sc內
Scanner[] arr = new Scanner[5];	//在heap配置 5個Scanner的類別用來存scanner的位置
arr[0] = sc; //將位於stack的sc的值，儲存到位於heap內的arr[0]的位置
```


* 二維陣列
	* 第一階在stack 存位址，實際陣列位於heap
	* 位於heap的陣列，儲存第二維的位置，資料位於另外的heap位址
```java=
int[][] arr = new int[3][3];
arr[0]=arr[1]; //將arr[1]內存的"位址"，儲存到arr[0]內
arr[0][0] = 1; //此時 arr[1][0] 是同一個記憶體位置內存值
arr[0][1] = 2; //此時 arr[1][1] 是同一個記憶體位置內存值

java可動態調整array長度!!
int[][] arr = new int[3][];
for(int i=0;i<3;i++){
	arr[i] = new int[i+1]; //創建不同長度的第二階陣列
	for(int j=0;j<i+1;j++){
		arr[i][j]=j+1; //賦值
	}
}
for(int i=0;i<3;i++){
	for(int j=0;j<i+1;j++){
		System.out.println(arr[i][j]); //印出
	}
}
```

下周要考 記憶體配置圖 畫法

* 陣列數值交換
	* 可藉由一階Arr位置交換
```java=
//arr[][]
int[] tmp = arr[i];	//宣告tmp 為一階矩陣，位於stack指向arr[i]所儲存二階的位置
arr[i]=arr[i+1];
arr[i+1]=tmp;
```

* list前導 - 陣列放大
```java=
int[] arr = new int[2];
int count =0;

do{
	if(arr.length == count){
		int[] tmpArr = new int[arr.length*2]; //創建兩倍空間的新Array
		for(int i=0;i<arr.length;i++){ //搬移原本資訊到新的區塊
			tmpArr[i] = arr[i];
		}
		arr = tmpArr; //原記憶體 會進入GC(garbege collector)	
	}
	arr[count++]=sc.nextInt();
}


```

