Answers:
它们在语义上是相同的。int array[]
添加该语法只是为了帮助C程序员习惯Java。
int[] array
更可取,并且不会造成混乱。
int array[]
语法。同样合乎逻辑...以某种扭曲的方式。:)
int array[]
对我来说更有意义。您如何看待这个声明?int[] x, y
?是y
不是数组?也许是,也许不是。只有Java的大师们可以自信地回答....
int[] x, y
,y
是一个数组(因为[]
属于类型),在的情况下int x[], y
,y
不是数组([]
属于变量)。
不,这些都是一样的。然而
byte[] rowvector, colvector, matrix[];
等效于:
byte rowvector[], colvector[], matrix[][];
取自Java Specification。那意味着
int a[],b;
int[] a,b;
是不同的。我不建议使用这些多个声明中的任何一个。最容易阅读的可能是:
int[] a;
int[] b;
[]可能会在声明的开头作为类型的一部分出现,或在特定变量的声明器中出现,或者两者都出现,如本例所示:
byte[] rowvector, colvector, matrix[];
该声明等效于:
byte rowvector[], colvector[], matrix[][];
就我个人而言,我见过的几乎所有 Java代码都使用第一种形式,通过将有关变量的所有类型信息都放在一个位置,这更有意义。老实说,我希望第二种形式不被允许……但生活就是这样……
幸运的是,我认为我从未见过以下(有效)代码:
String[] rectangular[] = new String[10][10];
int[] a[];
- 永远不会不清楚;-)
这两个命令是同一件事。
您可以使用语法声明多个对象:
int[] arrayOne, arrayTwo; //both arrays
int arrayOne[], intOne; //one array one int
请参阅:http : //java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html
没有真正的区别;然而,
double[] items = new double[10];
首选,因为它清楚地表明类型是数组。
两者同等有效。int puzzle[]
但是不建议使用该形式,int[] puzzle
根据编码约定,最好使用。另请参见官方Java数组教程:
同样,您可以声明其他类型的数组:
byte[] anArrayOfBytes; short[] anArrayOfShorts; long[] anArrayOfLongs; float[] anArrayOfFloats; double[] anArrayOfDoubles; boolean[] anArrayOfBooleans; char[] anArrayOfChars; String[] anArrayOfStrings;
您也可以在数组名称后放置方括号:
float anArrayOfFloats[]; // this form is discouraged
然而,惯例不鼓励这种形式。方括号标识阵列类型,并应与类型名称一起出现。
注意最后一段。
我建议阅读官方的Sun / Oracle教程,而不是一些第三方的教程。否则您将冒着学习不良做法的风险。
这是另一种形式,是从 C
java所基于的。
出于好奇,可以使用以下三种main
方法在Java中定义有效方法:
public static void main(String[] args)
public static void main(String args[])
public static void main(String... args)
public static void main ( String \u005B \u005D args )
,这也是另一种变体。
String... param
,是一个数组
, then why it is not possible to call a method like say
someMethod(1,2)`(如果将其定义someMethod
为)someMethod ( int[] numbers )
。数组要求参数必须来自连续的内存位置,尽管varargs
,该参数将首先从提供的参数中生成数组。此外,a varargs
只能是方法的最终参数,尽管对于数组而言并非如此。
meth(int... a)
可以称为meth(1, 2)
或meth(new int[] {1, 2})
。Varargs是一种语法糖,它将第一个版本转换为第二个版本。参数的实际(字节码)类型是数组类型。至于必须倒数第二,如果您考虑一下,别无选择。
在Java语言规范说:
The [] may appear as part of the type at the beginning of the declaration,
or as part of the declarator for a particular variable, or both, as in this
example:
byte[] rowvector, colvector, matrix[];
This declaration is equivalent to:
byte rowvector[], colvector[], matrix[][];
因此,它们将导致完全相同的字节码。
两者具有相同的含义。但是,这些变体的存在也允许这样做:
int[] a, b[];
与以下内容相同:
int[] a;
int[][] b;
但是,这是可怕的编码风格,绝不应该这样做。
它们是相同的,但是这些语句之间存在重要区别:
// 1.
int regular, array[];
// 2.
int[] regular, array;
在1.常规中只是一个int,而不是2.在常规和array都是int的数组中。
因此,您的第二条陈述是更可取的,因为它更清晰。根据有关Oracle的本教程,也不建议使用第一种形式。