Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要解释一下这个Java语法吗_Java_Arrays_Syntax - Fatal编程技术网

需要解释一下这个Java语法吗

需要解释一下这个Java语法吗,java,arrays,syntax,Java,Arrays,Syntax,有人能解释一下下面的内容吗 private HashSet nodes[]; nodes = new HashSet[21]; 我有点困惑。。。区别于 private HashSet nodes = new HashSet; 尤其是在方括号语法方面。这是一个哈希集数组吗?因为通常我都习惯于看电影 int[] myarray = new int[21]; 或者类似的东西。是的,它是一个哈希集数组 HashSet nodes[]; 与 HashSet[] nodes; 只有在每次使用逗号

有人能解释一下下面的内容吗

private HashSet nodes[]; 
nodes = new HashSet[21];
我有点困惑。。。区别于

private HashSet nodes = new HashSet;
尤其是在方括号语法方面。这是一个哈希集数组吗?因为通常我都习惯于看电影

int[] myarray = new int[21];

或者类似的东西。

是的,它是一个
哈希集数组

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)

它们只是替代品——不幸的是,两者都是有效的

见鬼,即使这样也是有效的:

int[] bad [] = null;
那相当于

int[][] bad = null;
显然,不要这样做:)

发件人:

[]可能作为类型的一部分出现在声明的开头,或者作为特定变量的声明器的一部分出现,或者两者都出现

我们不建议在数组变量声明中使用“混合表示法”,因为括号同时出现在类型和声明器中

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

不是有效的Java。与JavaScript不同,Java中的
new
操作符总是需要一个括号内的参数列表

不同于

前者构造一个
HashSet
集,该集最初有足够的空间容纳21个集合项,而后者是一个
21
null值数组,可以用集合的引用填充


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

为21
HashSet
引用创建一个具有空格的数组,并将其分配给该成员变量

请记住,在Java中,与C不同,
HashSet[21]
不是一种类型,因此您不能仅通过

int[21] myints;
在某些情况下,您必须通过

  • 新[尺寸]
  • 缩写语法
    new{element0,element1,element2,…}
    ,
  • 或者通过
    java.lang.reflect.Array.newInstance
    进行反射

    • 在Java中,声明

      private HashSet nodes[];
      
      等同于声明

      private HashSet[] nodes;
      

      它可以读作“一个HashSet数组”或“一个HashSet数组。”

      所以它相当于说私有HashSet[]节点?是的。在Java中,括号可以放在任何一个地方。@varatis,Java引入了
      Type[]
      语法,这样你就可以把整个类型放在一个地方,但也允许C风格的语法使C/C++程序员更容易学习Java。在Java中,你可以像
      Type foo[]
      那样声明数组,但这很难,更常见的情况是数组声明为
      Type[]foo
      。当您有很长的变量列表时,没有什么不好的地方。@trutheality:您的意思是什么?我认为这两种形式都没有好处,这使得像“坏”的声明这样令人困惑的声明是有效的。我并不是说数组本身是不幸的——我是说有两种不同的声明方式是不幸的符号。我只是想指出,能够编写一个声明的形式是
      int number1,number2,array1[],array2[],matrix[]非常方便。当然,便利是微不足道的,但它确实存在。特别是如果你认为允许这两种形式的唯一负面结果是,有人可以写出混乱的代码,那就不太有坏处了——总会有人找到一种写混淆代码的方法。就我个人而言,我几乎总是在每个声明中都有一个变量——这样评论比较容易。我认为编写混乱代码的能力是一个很大的缺点。当然,编写令人困惑的代码总是有可能的,但是语言应该尽可能避免这种情况。我想你不介意能够写
      其他线程其中之一?请记住,当我在这样的列表中声明三个以上的变量时,我会在逗号处缩进和换行,这样您仍然可以轻松地进行注释。我试图使代码既可读又简洁——有一种代码过于冗长<代码>其他线程。睡眠(1000)我不喜欢。无法想出调用
      someObject.staticMethod()的情况
      在现场很有用,但我认为有一个很好的理由允许它。我确实认为,在许多情况下,使用类似于
      严格静态的
      修饰符的东西将是一个非常好的主意。
      
      private HashSet nodes[]; 
      
      nodes = new HashSet[21];
      
      int[21] myints;
      
      private HashSet nodes[];
      
      private HashSet[] nodes;