当前位置:首页 > 后端开发 > 正文

Java如何声明数组?

在Java中声明数组有两种语法: 数据类型[] 数组名;数据类型 数组名[];,如 int[] arr;int arr[];,初始化需用 new指定长度(如 arr = new int[5];)或直接赋值(如 int[] arr = {1,2,3};),数组长度固定,元素类型必须一致。

数组基础概念

数组是固定长度的连续内存空间,用于存储相同数据类型的元素,通过索引(从0开始)访问。int[]表示整型数组,String[]表示字符串数组。


一维数组的4种声明方式

标准声明(推荐)

// 声明一个整型数组(未初始化)
int[] numbers;
// 声明并初始化(长度5,元素默认0)
numbers = new int[5]; 

特点

  • 类型与方括号紧密相连(int[]),提高可读性
  • 初始化时需指定长度(如new int[5]

声明时直接赋值

// 声明并赋予初始值(自动推导长度为3)
String[] names = {"Alice", "Bob", "Charlie"};

注意

Java如何声明数组?  第1张

  • 必须在一行内完成声明和赋值
  • 不能拆分:String[] names; names = {"...", ...}; 错误!

类C风格(不推荐)

int numbers[];  // 功能同上,但可读性差
numbers = new int[3];

缺点

  • 方括号在变量名后,易与类型混淆
  • Java官方规范已弃用此写法

分步声明与初始化

double[] prices;        // 声明
prices = new double[4]; // 初始化(长度4,默认值0.0)
// 后续赋值
prices[0] = 19.99;
prices[1] = 29.99;

多维数组声明

二维数组(矩阵)

// 声明3行2列的整型矩阵
int[][] matrix = new int[3][2]; 
// 直接赋值(锯齿数组)
int[][] jagged = {
    {1, 2},
    {3, 4, 5},  // 第二行长度不同
    {6}
};

分步初始化

int[][] grid;
grid = new int[2][];    // 先声明行数
grid[0] = new int[3];   // 第一行3列
grid[1] = new int[4];   // 第二行4列

关键注意事项

  1. 长度不可变
    数组一旦创建,长度固定,扩容需创建新数组:

    int[] arr = {1, 2, 3};
    arr = Arrays.copyOf(arr, 5); // 扩容至长度5
  2. 默认值规则
    | 数据类型 | 默认值 |
    |————–|———–|
    | int, byte| 0 |
    | double | 0 |
    | boolean | false |
    | 对象引用 | null |

  3. 空指针风险
    未初始化的数组不能使用:

    int[] data; 
    System.out.println(data[0]); //  编译错误

常见错误示例

错误代码 原因 修正方案
int[] arr; arr[0]=1; 未初始化 添加 arr = new int[3];
int size=5; int[5] arr; 声明时指定长度 改为 int[] arr = new int[size];
arr = {1,2,3}; 未在声明行赋值 与声明合并:int[] arr={1,2,3};

  • 首选语法数据类型[] 变量名 = new 数据类型[长度];
  • 直接赋值类型[] 变量名 = {值1, 值2, ...};(不可拆分)
  • 多维数组:遵循“先行后列”原则(如int[][]
  • 务必初始化:避免空指针异常

引用说明基于Oracle官方文档《Java™教程:数组》[1]和《Java语言规范》[2],遵循Java SE 17标准,实践代码通过OpenJDK 17编译验证。


掌握这些核心方法可高效处理数据集合,后续可结合ArrayList等动态容器应对灵活需求。

参考资料
[1] Oracle Java Tutorials: Arrays. https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html
[2] Java Language Specification: Chapter 10. Arrays. https://docs.oracle.com/javase/specs/jls/se17/html/jls-10.html

0