[toc]
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html
# Array
### 宣告陣列變數
```java
int[] arr;
int arr2[]; // 不建議
```
---
### 建立陣列
建立一個有10個int的陣列, 並assign到arr變數
```java
arr = new int[10];
```
其他建立範例
```java
int[] arr = new int[3];
// 此時arr = {0, 0, 0}
String[] arr2 = new String[3];
// 此時arr2 = {null, null, null}
```
---
### 以初始值建立陣列
請養成在`,`後空一格的好習慣。
```java
int[] arr = {1, 2, 3, 4, 5};
String names = {"Olympic", "Titanic", "Britannic"};
```
```{}```方法(初始值) **只有在宣告時能使用**
不能再```arr = {6, 7, 8, 9, 10};``` 來進行更改內容
---
### 陣列取值, 設值
在學取值前,我們要先懂 index(索引) 的概念
首先,我們要取值的方式就是 ==arr[(index)]== (arr 是 array 的縮寫)
<!-- 假設今天我想取 arr[3]
電腦會先找到 arr 這個陣列的記憶體位置
在往後數3個 (因為陣列的記憶體是連續排列的)
以此找到 arr[3] -->
有個神奇的特性,他的 index(索引) 是從0開始算的
意思就是如果==陣列長度為4,那他的 index 會是 0~3==
因此,剛剛我們取的 ==arr[3] 其實是陣列的第四項==
所以在取值 & 設值的時候我們通常這樣設
```java
int[] arr = new int[4];
//設值
// 把arr的第一項設置為122
// {122, 0, 0, 0}
arr[0] = 122;
// 把arr的第一項設置為97
// {122, 97, 0, 0}
arr[1] = 97;
// 取值
int k = arr[0];
System.out.println(k); // 122
```
---
陣列長度(int): ```arr.length```
(陣列長度無法更改)
<!-- (補充)
index從0開始算的原因:
從剛剛的介紹中,我們已經了解了取值的過程
而其中 index 起始值為 0 原因是因為電腦 arr 的記憶體位址存的是第一個數值,而程式語言開發時為了防止不必要的減法運算所以從0開始
不必要的減法運算:
假設你要取 arr[n],電腦會在得到記憶體位子後,往後數 n 個位置,那如果今天 index 由 1 開始,便要往後數 n-1 ,開發員不希望不必要的 n-1 -->
---
### 複製陣列
在`System` class 有
```java
public static void arraycopy(Object src, int srcPos,
Object dest, int destPos, int length)
```
能使用。
---
### 多維陣列
```java=
int[][] arr;
int[][] arr = new int[3][3];
int[][] arr = {{1, 2, 3}, {4, 5, 6}};
```