需要解释此Java语法

时间:2012-04-06 22:58:33

标签: java arrays syntax

有人可以解释以下内容吗?

private HashSet nodes[]; 
nodes = new HashSet[21];

我有点困惑......在

之间的区别
private HashSet nodes = new HashSet;

以上,尤其是方括号语法。这是一个HashSets数组吗?因为通常我习惯看

int[] myarray = new int[21];

或类似的东西。

4 个答案:

答案 0 :(得分:5)

他们只是替代品 - 不幸的是,两者都是有效的。

哎呀,即使这样也是有效的:

int[] bad [] = null;

这相当于

int[][] bad = null;

显然不要这样做:)

来自section 10.2 of the JLS

  

[]可以在声明开头作为类型的一部分出现,也可以作为特定变量的声明者的一部分,或两者兼而有之。

  

我们不建议在数组变量声明中使用“混合表示法”,其中括号出现在类型和声明符中。

基本上,使用将所有类型信息保存在一个地方的表单 - 您习惯使用的表单。那是压倒性的惯用形式。

答案 1 :(得分:3)

private HashSet nodes = new HashSet;

是无效的Java。与JavaScript不同,Java中的new运算符始终需要带括号的参数列表。

private HashSet nodes = new HashSet(21);

不同
private HashSet[] nodes = new HashSet[21];

因为前者构造了一个HashSet集合,该集合最初具有足够的空间用于21个集合项目,而后者是一个21空值的数组,可以用集合的引用填充。


private HashSet nodes[]; 

声明一个成员变量,该变量可以引用其元素类型为HashSet的任何数组。

nodes = new HashSet[21];

创建一个包含21个HashSet引用空间的数组,并将其分配给该成员变量。

请记住,在Java中,与C不同,HashSet[21]不是一种类型,因此您无法通过执行来为Java中的数组分配空间

int[21] myints;

在某些时候你必须通过

创建一个数组
  • new <type>[size]
  • 缩写语法new <type> { element0, element1, element2, ... }
  • 或通过java.lang.reflect.Array.newInstance反思。

答案 2 :(得分:2)

是的,它是一个HashSets的数组。

HashSet nodes[];

相同
HashSet[] nodes;

当您使用逗号一次声明一堆变量时,放置括号的位置的差异变得很重要:

HashSet[] alpha, bravo, charlie; // Three arrays of hashsets
HashSet delta[], echo, foxtrot; // One array (delta) and two hashsets (echo and foxtrot)

答案 3 :(得分:1)

在Java中,声明

private HashSet nodes[];

等同于声明

private HashSet[] nodes;

它可以发音为“HashSets数组”或“HashSet数组”。