Java中的数组:如何声明和初始化?完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么这个问题甚至困扰着有经验的Java开发者?

\n\n

如果你曾经搜索过“如何在Java中声明和初始化数组?”,你并不孤单。这个问题在Stack Overflow上获得了数十万次浏览,并且还在持续增长。看起来似乎没什么复杂的?但魔鬼往往藏在细节中。Java是一种强类型语言,其数组语法可能会让初学者感到困惑。

\n\n

在本文中,我们将详细解析在Java中声明和初始化数组的所有可能方式。你将了解int[] arr与int arr[]的区别,如何正确创建对象数组,以及如何避免陷入NullPointerException的陷阱。我们开始吧!

\n\n

1. 基础:Java中的数组是什么?

\n\n

Java中的数组是一个容器,用于存储固定数量的同类型元素。与Python或JavaScript不同,在Java中,数组的大小在创建时指定,并且无法更改。

\n\n
int[] numbers; // 声明\nnumbers = new int[5]; // 初始化——为5个元素分配内存\n
\n\n

在第一行中,我们告诉编译器:“我想创建一个变量,它将引用一个整数数组。”在第二行中,我们为5个元素分配内存。只有在此之后,数组才可以使用。

\n\n

2. 数组的声明方式

\n\n

在Java中,有两种声明数组的语法。两者都有效,但Java社区(以及Oracle官方编码标准)推荐第一种方式。

\n\n

方式1:数据类型 + 变量名前的方括号

\n
int[] myArray;\nString[] names;\ndouble[] prices;\n
\n\n

方式2:变量名后的方括号(C/C++风格)

\n
int myArray[];\nString names[];\ndouble prices[];\n
\n\n

应该选择哪一种?第一种方式读起来更自然:int[] myArray——“名为myArray的整数数组”。第二种方式可能会造成混淆,尤其是在一行中声明多个变量时:

\n\n
int[] arr1, arr2; // 两个变量都是数组\nint arr3[], arr4; // arr3是数组,arr4是普通整数(错误!)\n
\n\n

因此,请始终使用类型[] 名称。

\n\n

3. 数组初始化:4种经过验证的方式

\n\n

声明之后,需要初始化数组。以下是正确的方法。

\n\n

方式1:创建指定大小的空数组

\n
int[] numbers = new int[10]; // 包含10个元素的数组,所有元素默认为0\nString[] words = new String[5]; // 包含5个字符串的数组,所有元素默认为null\n
\n\n

这种方式适用于你计划稍后填充数组的情况(例如,在循环中)。请记住:对于数值类型,默认值为0;对于boolean,默认值为false;对于引用类型,默认值为null。

\n\n

方式2:使用数组字面量进行初始化

\n
int[] numbers = {1, 2, 3, 4, 5};\nString[] fruits = {"apple", "banana", "orange"};\n
\n\n

这是最简短、最方便的方式,适用于你事先知道所有元素的情况。请注意:这种语法仅在声明时有效。

\n\n

方式3:匿名数组(无变量名)

\n
int[] numbers = new int[]{1, 2, 3, 4, 5};\n
\n\n

当你需要将数组传递给方法而不创建单独变量时,这种方式很有用:

\n\n
printArray(new int[]{10, 20, 30});\n
\n\n

方式4:通过循环进行初始化

\n
int[] squares = new int[10];\nfor (int i = 0; i < squares.length; i++) {\n    squares[i] = (i + 1) * (i + 1);\n}\n
\n\n

非常适合动态填充,例如计算值或从文件读取数据。

\n\n

4

博客

书籍推荐