Java一维数组 #

一、数组概述 #

数组是存储相同类型数据的容器,具有以下特点:

  • 固定长度
  • 存储相同类型数据
  • 通过索引访问
  • 索引从0开始

二、数组声明 #

2.1 声明语法 #

java
// 方式1:推荐
int[] arr1;
String[] arr2;

// 方式2:不推荐
int arr3[];
String arr4[];

2.2 注意事项 #

java
// 声明时不指定长度
int[] arr;  // 只是声明,还没有创建数组

// 声明多个数组
int[] a, b, c;  // 三个都是int[]
int d[], e, f;  // d是int[],e和f是int(不推荐)

三、数组创建 #

3.1 使用new关键字 #

java
// 创建指定长度的数组
int[] arr = new int[5];  // 创建长度为5的int数组

// 默认值
// int: 0
// double: 0.0
// boolean: false
// char: '\u0000'
// 引用类型: null

3.2 声明并创建 #

java
int[] arr = new int[5];
String[] names = new String[3];
boolean[] flags = new boolean[10];

3.3 直接初始化 #

java
// 静态初始化
int[] arr1 = {1, 2, 3, 4, 5};
String[] arr2 = {"张三", "李四", "王五"};

// 完整语法
int[] arr3 = new int[]{1, 2, 3, 4, 5};
String[] arr4 = new String[]{"A", "B", "C"};

四、数组访问 #

4.1 通过索引访问 #

java
int[] arr = {10, 20, 30, 40, 50};

// 读取元素
System.out.println(arr[0]);  // 10
System.out.println(arr[2]);  // 30

// 修改元素
arr[0] = 100;
System.out.println(arr[0]);  // 100

4.2 数组长度 #

java
int[] arr = {1, 2, 3, 4, 5};
System.out.println(arr.length);  // 5

// 注意:length是属性,不是方法

4.3 索引范围 #

java
int[] arr = {1, 2, 3};

// 有效索引:0 到 length-1
arr[0];  // 正确
arr[2];  // 正确

// 错误:索引越界
// arr[3];  // ArrayIndexOutOfBoundsException
// arr[-1]; // ArrayIndexOutOfBoundsException

4.4 安全访问 #

java
public static int safeGet(int[] arr, int index, int defaultValue) {
    if (index >= 0 && index < arr.length) {
        return arr[index];
    }
    return defaultValue;
}

五、数组遍历 #

5.1 for循环 #

java
int[] arr = {10, 20, 30, 40, 50};

for (int i = 0; i < arr.length; i++) {
    System.out.println("arr[" + i + "] = " + arr[i]);
}

5.2 增强for循环 #

java
int[] arr = {10, 20, 30, 40, 50};

for (int num : arr) {
    System.out.println(num);
}

5.3 两种方式对比 #

java
String[] names = {"张三", "李四", "王五"};

// 需要索引时使用for
for (int i = 0; i < names.length; i++) {
    System.out.println(i + ": " + names[i]);
}

// 只需要值时使用增强for
for (String name : names) {
    System.out.println(name);
}

5.4 使用Arrays.toString #

java
import java.util.Arrays;

int[] arr = {1, 2, 3, 4, 5};
System.out.println(Arrays.toString(arr));  // [1, 2, 3, 4, 5]

六、数组初始化详解 #

6.1 动态初始化 #

java
// 先创建,后赋值
int[] arr = new int[5];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;

6.2 静态初始化 #

java
// 声明时直接赋值
int[] arr = {1, 2, 3, 4, 5};

// 或使用完整语法
int[] arr2 = new int[]{1, 2, 3, 4, 5};

6.3 匿名数组 #

java
// 作为方法参数传递
printArray(new int[]{1, 2, 3, 4, 5});

public static void printArray(int[] arr) {
    System.out.println(Arrays.toString(arr));
}

七、数组内存分析 #

7.1 基本类型数组 #

java
int[] arr = new int[3];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;

// 栈内存:存储arr引用变量
// 堆内存:存储数组对象 {10, 20, 30}

7.2 引用类型数组 #

java
String[] names = new String[3];
names[0] = "张三";
names[1] = "李四";

// 栈内存:存储names引用变量
// 堆内存:存储数组对象,元素是引用
// 字符串常量池:存储"张三"、"李四"

7.3 数组引用 #

java
int[] arr1 = {1, 2, 3};
int[] arr2 = arr1;  // arr2和arr1指向同一个数组

arr2[0] = 100;
System.out.println(arr1[0]);  // 100

// 复制数组
int[] arr3 = Arrays.copyOf(arr1, arr1.length);

八、常见操作 #

8.1 求和与平均值 #

java
int[] arr = {10, 20, 30, 40, 50};

int sum = 0;
for (int num : arr) {
    sum += num;
}

double avg = (double) sum / arr.length;
System.out.println("总和: " + sum);      // 150
System.out.println("平均值: " + avg);    // 30.0

8.2 查找最大最小值 #

java
int[] arr = {30, 10, 50, 20, 40};

int max = arr[0];
int min = arr[0];

for (int num : arr) {
    if (num > max) max = num;
    if (num < min) min = num;
}

System.out.println("最大值: " + max);  // 50
System.out.println("最小值: " + min);  // 10

8.3 查找元素 #

java
int[] arr = {10, 20, 30, 40, 50};
int target = 30;
int index = -1;

for (int i = 0; i < arr.length; i++) {
    if (arr[i] == target) {
        index = i;
        break;
    }
}

System.out.println("索引: " + index);  // 2

8.4 统计元素 #

java
int[] arr = {1, 2, 3, 2, 1, 2, 3, 1, 1};
int target = 1;
int count = 0;

for (int num : arr) {
    if (num == target) {
        count++;
    }
}

System.out.println("出现次数: " + count);  // 4

九、数组作为方法参数 #

9.1 传递数组 #

java
public static void printArray(int[] arr) {
    if (arr == null) {
        System.out.println("数组为null");
        return;
    }
    for (int num : arr) {
        System.out.print(num + " ");
    }
    System.out.println();
}

// 调用
int[] nums = {1, 2, 3};
printArray(nums);
printArray(new int[]{4, 5, 6});

9.2 返回数组 #

java
public static int[] createArray(int size, int value) {
    int[] arr = new int[size];
    for (int i = 0; i < size; i++) {
        arr[i] = value;
    }
    return arr;
}

// 调用
int[] arr = createArray(5, 10);
// arr = {10, 10, 10, 10, 10}

十、注意事项 #

10.1 数组越界 #

java
int[] arr = {1, 2, 3};

// 错误:索引越界
// arr[3];  // ArrayIndexOutOfBoundsException

// 安全检查
int index = 3;
if (index >= 0 && index < arr.length) {
    System.out.println(arr[index]);
}

10.2 空指针异常 #

java
int[] arr = null;

// 错误:空指针异常
// arr.length;  // NullPointerException
// arr[0];      // NullPointerException

// 安全检查
if (arr != null && arr.length > 0) {
    System.out.println(arr[0]);
}

10.3 数组长度不可变 #

java
int[] arr = {1, 2, 3};
// arr.length = 5;  // 错误:不能修改长度

// 需要更大数组时,创建新数组
int[] newArr = new int[5];
System.arraycopy(arr, 0, newArr, 0, arr.length);

十一、总结 #

操作 语法
声明 int[] arr;
创建 arr = new int[5];
初始化 int[] arr = {1, 2, 3};
访问 arr[0]
长度 arr.length
遍历 for (int num : arr)

数组要点:

  • 长度固定,创建后不可变
  • 索引从0开始
  • 注意越界和空指针异常
  • 使用增强for循环简化遍历
最后更新:2026-03-26