关于java:数组创建的约定是什么?

What are the conventions for array creation?

本问题已经有最佳答案,请猛点这里访问。

在Java中创建数组的惯例是什么?我应该用吗?

1
int[] myIntArray;

1
int myIntArray[];

另外,在创建时或之后初始化它们的值更好吗?

2

VS

1
2
int[] myIntArray;
myIntArray = new int[] {1,2,3};


int[] aint a[]的声明都是等效的。

它只是一种写它的替代方法,因为数组索引可以放在类型名之后,也可以放在标识符名之后。唯一的区别是,如果在一行中声明多个变量,如果索引放在类型名之后,则列出的所有标识符都将是该类型的数组,而如果索引放在标识符名之后,则只有该标识符将是数组。

例子:

2

我建议将索引放在类型(int[]array1)之后,这样它就不会有歧义。

当您尽可能地声明数组时,立即初始化它,因为它更有效。如果您不立即初始化数组,那么JVM将用零或null值初始化数组,稍后您必须填充它,这将变慢,因为JVM还将执行数组索引范围检查等。更不用说,您的代码将越来越长,越来越难读取,并且您必须显式地提供索引(其中在枚举不提供索引的数组元素时(它们是随数组长度隐式推导的),可能会出错。

初始化示例:

1
2
3
4
5
6
7
8
9
//"Slow" filling
int[] arr = new int[3]; // Filled with zeros by default
arr[0] = 1; // Explicit index, index check
arr[1] = 2; // Explicit index, index check
arr[2] = 3; // Explicit index, index check

//"Fast" filling at creation time, implicit indices and array length,
// no index checks
int[] arr2 = {1, 2, 3};


声明数组时,约定要求使用数据类型而不是数组变量的方括号。

1
2
int[] myIntArray; // This is the convention
int myIntArray[]; // Ok by syntax, but not the Java convention

初始化值完全取决于您的用法,但最好使用完整的数组声明

1
2
int[] myIntArray = new int[]{1,2,3}; // Better
int[] myIntArray = {1,2,3}; // Ok by syntax, but not the convention


1
2
int[] anArray; // Declares an array of integers
anArray = new int[10]; // One way to create an array is with the new operator

或者,可以使用快捷方式语法创建和初始化数组:

1
2
3
4
5
int[] anArray = {
    100, 200, 300,
    400, 500, 600,
    700, 800, 900, 1000
};

声明数组引用时,应始终将数组括号放在声明的类型之后,而不是标识符(变量名)之后。这样,任何阅读代码的人都可以很容易地知道,例如,key是对int数组对象的引用,而不是int原语。

1
2
int[] key;
int key [];

此外,在详细介绍变量初始化的页面上,他们有一个示例,演示了将括号放在变量名后面可能出现的问题:

1
int foo, fooarray[]; // WRONG!

int arrayname[]或int[]arrayname

这两者都有可能,但int[] arrayname更清晰,因为类型不是int,而是int数组(int[])。Java约定执行同样的操作,如您在第19页中所看到的。

数组初始化

int[] myIntArray = { 1, 2, 3 };较短,在我看来更整洁。


我认为这取决于项目的代码标准。没有更好的方法。在我的情况下,我使用

int[] myIntArray = {1,2,3};