it-swarm.com.de

Unterschied zwischen int [] array und int array []

Ich habe kürzlich über den Unterschied zwischen den beiden Arten der Definition eines Arrays nachgedacht:

  1. int[] array
  2. int array[]

Ist da ein Unterschied?

222
mslot

Sie sind semantisch identisch. Das int array[] Syntax wurde nur hinzugefügt, um C-Programmierern zu helfen, sich an Java zu gewöhnen.

int[] array ist viel vorzuziehen und weniger verwirrend.

268
skaffman

Es gibt einen kleinen Unterschied, wenn Sie mehr als eine Variable in derselben Deklaration deklarieren:

int[] a, b;  // Both a and b are arrays of type int
int c[], d;  // WARNING: c is an array, but d is just a regular int

Beachten Sie, dass dies ein schlechter Codierungsstil ist, obwohl der Compiler mit ziemlicher Sicherheit Ihren Fehler abfängt, sobald Sie versuchen, d zu verwenden.

167
Adam Rosenfield

Es gibt keinen Unterschied.

Ich bevorzuge die type[] name Format bei ist klar, dass die Variable ein Array ist (weniger herumschauen, um herauszufinden, was es ist).

BEARBEITEN:

Oh, warte, es gibt einen Unterschied (ich habe vergessen, weil ich nie mehr als eine Variable gleichzeitig deklariere):

int[] foo, bar; // both are arrays
int foo[], bar; // foo is an array, bar is an int.
52
TofuBeer

Nein, das sind die gleichen. jedoch

byte[] rowvector, colvector, matrix[];

ist äquivalent zu:

byte rowvector[], colvector[], matrix[][];

Entnommen aus Java-Spezifikation . Das bedeutet, dass

int a[],b;
int[] a,b;

sind anders. Ich würde keine dieser Mehrfacherklärungen empfehlen. Am einfachsten zu lesen wäre (wahrscheinlich):

int[] a;
int[] b;
26
Ishtar

Von Abschnitt 10.2 der Java Sprachspezifikation :

Das [] kann als Teil des Typs am Anfang der Deklaration oder als Teil des Deklarators für eine bestimmte Variable oder für beide angezeigt werden, wie in diesem Beispiel:

 byte[] rowvector, colvector, matrix[];

Diese Erklärung entspricht:

byte rowvector[], colvector[], matrix[][];

Persönlich fast alles der Java Code, den ich je gesehen habe, verwendet die erste Form, was sinnvoller ist, wenn man alle behält die Typinformationen über die Variable an einer Stelle. Ich wünschte, die zweite Form wäre verboten, um ehrlich zu sein ... aber so ist das Leben ...

Glücklicherweise glaube ich nicht, dass ich diesen (gültigen) Code jemals gesehen habe :

String[] rectangular[] = new String[10][10];
24
Jon Skeet

Die beiden Befehle sind dasselbe.

Sie können die Syntax verwenden, um mehrere Objekte zu deklarieren:

int[] arrayOne, arrayTwo; //both arrays

int arrayOne[], intOne; //one array one int 

siehe: http://Java.Sun.com/docs/books/jls/second_edition/html/arrays.doc.html

19
George Strother

Kein Unterschied.

Zitat aus So :

Das [] kann als Teil des Typs am Anfang der Deklaration oder als Teil des Deklarators für eine bestimmte Variable oder für beides erscheinen, wie in diesem Beispiel: byte[] rowvector, colvector, matrix[];

Diese Erklärung entspricht: byte rowvector[], colvector[], matrix[][];

13
Yuval Adam

Es gibt keinen Unterschied zwischen den beiden; beide deklarieren ein Array von ints. Ersteres wird jedoch bevorzugt, da die Typinformationen an einem Ort gespeichert werden. Letzteres wird nur wirklich unterstützt, wenn C/C++ - Programmierer auf Java umsteigen.

11
Luke Woodward

Es gibt keinen wirklichen Unterschied; jedoch,

double[] items = new double[10];

wird bevorzugt, da dies eindeutig anzeigt, dass es sich bei dem Typ um ein Array handelt.

11
Aaron Maenpaa

Beide sind gleichermaßen gültig. Das int puzzle[] Form ist jedoch entmutigt, die int[] puzzle wird nach den Kodierungskonventionen bevorzugt. Siehe auch das offizielle Java-Array-Tutorial :

Ebenso können Sie Arrays anderer Typen deklarieren:

byte[] anArrayOfBytes;
short[] anArrayOfShorts;
long[] anArrayOfLongs;
float[] anArrayOfFloats;
double[] anArrayOfDoubles;
boolean[] anArrayOfBooleans;
char[] anArrayOfChars;
String[] anArrayOfStrings;

Sie können die eckigen Klammern auch nach dem Namen des Arrays setzen:

float anArrayOfFloats[]; // this form is discouraged

Die Konvention rät jedoch von dieser Form ab. Die Klammern kennzeichnen den Array-Typ und sollten zusammen mit der Typbezeichnung erscheinen.

Beachten Sie den letzten Absatz.

Ich empfehle, die offiziellen Sun/Oracle-Tutorials zu lesen und nicht einige Tutorials von Drittanbietern. Sie würden sonst riskieren, schlechte Praktiken zu lernen.

7
BalusC

Es ist eine alternative Form, die von C entlehnt wurde, auf der Java basiert.

Kurioserweise gibt es drei Möglichkeiten, eine gültige main -Methode in Java zu definieren:

  • public static void main(String[] args)
  • public static void main(String args[])
  • public static void main(String... args)
6
Bohemian

Es gibt keinen Unterschied, aber Sun empfiehlt, ihn wie beschrieben neben den Typ zu stellen hier

5
André

Die am meisten bevorzugte Option ist int[] a - weil int[] ist der Typ und a ist der Name. (Ihre 2. Option ist die gleiche wie diese, mit verlegtem Leerzeichen)

Funktionell gibt es keinen Unterschied zwischen ihnen.

3
Bozho

Die Java Language Specification sagt:

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[][];

Sie ergeben also genau den gleichen Byte-Code.

3
Kdeveloper

Wie bereits erwähnt, gibt es keinen großen Unterschied (wenn Sie nur eine Variable pro Zeile deklarieren).

Beachten Sie, dass SonarQube Ihren zweiten Fall als kleinen Code-Geruch behandelt:

Array-Bezeichner "[]" sollten vom Typ sein, nicht von der Variablen (squid: S1197)

Zur besseren Lesbarkeit des Codes sollten sich die Array-Bezeichner immer auf dem Typ befinden. Andernfalls müssen Entwickler sowohl den Typ als auch den Variablennamen untersuchen, um festzustellen, ob eine Variable ein Array ist oder nicht.

Nicht konformes Codebeispiel

int matrix[][];   // Noncompliant
int[] matrix[];   // Noncompliant

Konforme Lösung

int[][] matrix;   // Compliant
2
Robert Hume

Sie sind die gleichen, aber es gibt einen wichtigen Unterschied zwischen diesen Aussagen:

// 1.
int regular, array[];
// 2.
int[] regular, array;

in 1. regular ist nur ein int, im Gegensatz zu 2. wobei sowohl regular als auch array Arrays von ints sind.

Die zweite Aussage, die Sie haben, wird daher bevorzugt, da sie klarer ist. Das erste Formular wird auch gemäß dieses Tutorial über Oracle abgeraten.

2
Patrick

In Java sind dies einfach verschiedene syntaktische Methoden, um dasselbe zu sagen.

2
Zach Lute

Sie sind die gleichen. Einer ist lesbarer (für manche) als der andere.

2
basszero

Sie sind völlig gleichwertig. int [] array ist der bevorzugte Stil. int array[] wird nur als äquivalenter C-kompatibler Stil bereitgestellt.

2
Derek Park

Es gibt keinen Unterschied in der Funktionalität zwischen beiden Deklarationsstilen. Beide deklarieren ein Array von int.

Aber int[] a hält die Typinformationen zusammen und ist ausführlicher, daher bevorzuge ich sie.

2
YoK

Beide haben die gleiche Bedeutung. Das Vorhandensein dieser Varianten ermöglicht jedoch auch Folgendes:

int[] a, b[];

das ist das gleiche wie:

int[] a;
int[][] b;

Dies ist jedoch ein schrecklicher Codierungsstil und sollte niemals durchgeführt werden.

2

Ja, genau das gleiche. Persönlich bevorzuge ich

int[] integers; 

weil es jedem, der Ihren Code liest, sofort klar wird, dass Ganzzahlen ein Array von Ganzzahlen sind, im Gegensatz zu

int integers[];

das macht es nicht so offensichtlich, besonders wenn Sie mehrere Deklarationen in einer Zeile haben. Aber auch hier sind sie gleichwertig, sodass es auf die persönlichen Vorlieben ankommt.

Schauen Sie sich diese Seite über Arrays in Java an, um ausführlichere Beispiele zu erhalten.

1
David Watson

wenn Sie eine einzelne Array-Referenz deklarieren, gibt es keinen großen Unterschied zwischen ihnen. Die folgenden zwei Erklärungen sind also gleich.

int a[];  // comfortable to programmers who migrated from C/C++
int[] a;  // standard Java notation 

wenn Sie mehrere Array-Referenzen deklarieren, können wir Unterschiede zwischen ihnen feststellen. Die folgenden beiden Aussagen bedeuten dasselbe. in der Tat liegt es an dem Programmierer, welchem ​​man folgt. Es wird jedoch die Standardnotation Java empfohlen.

int a[],b[],c[]; // three array references
int[] a,b,c;  // three array references
1
PoornaChandra

Beide sind ok. Ich schlage vor, einen auszuwählen und dabei zu bleiben. (Ich mache den zweiten)

0
Albert

Während int integers[] Lösungswurzeln in der C-Sprache (und können daher als der "normale" Ansatz angesehen werden), finden viele Leute int[] integers logischer, da es nicht erlaubt ist, Variablen unterschiedlichen Typs (d. h. ein Int und ein Array) in einer Deklaration zu erstellen (im Gegensatz zur Deklaration im C-Stil).

0
Kos