web-dev-qa-db-fra.com

Différence entre int [] array et int array []

J'ai récemment réfléchi à la différence entre les deux manières de définir un tableau:

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

Y a-t-il une différence?

222
mslot

Ils sont sémantiquement identiques. Le int array[] La syntaxe n'a été ajoutée que pour aider les programmeurs C à s'habituer à Java.

int[] array est de loin préférable et moins déroutant.

268
skaffman

Il y a une légère différence, si vous déclarez plus d'une variable dans la même déclaration:

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

Notez que c'est un mauvais style de codage, même si le compilateur va certainement capter votre erreur au moment où vous essayez d'utiliser d.

167
Adam Rosenfield

Il n'y a pas de différence.

Je préfère le type[] name Le format en est il est clair que la variable est un tableau (moins de regarder autour de savoir ce que c'est).

MODIFIER:

Oh attendez il y a une différence (j'ai oublié parce que je ne déclare jamais plus d'une variable à la fois):

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

Non, ce sont les mêmes. toutefois

byte[] rowvector, colvector, matrix[];

est équivalent à:

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

Tiré de spécification Java . Cela signifie que

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

sont différents. Je ne recommanderais aucune de ces déclarations multiples. Le plus facile à lire serait (probablement):

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

De section 10.2 de la Java :

Le [] peut apparaître en tant que partie du type au début de la déclaration, ou en tant que partie du déclarant pour une variable particulière, ou les deux, comme dans cet exemple:

 byte[] rowvector, colvector, matrix[];

Cette déclaration est équivalente à:

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

Personnellement, presque tout le code Java que j'ai jamais vu utilise le premier formulaire, ce qui est plus logique en conservant tout les informations de type sur la variable dans un endroit. Je souhaite que la deuxième forme soit rejetée, pour être honnête ... mais telle est la vie ...

Heureusement, je ne pense pas avoir jamais vu ce code (valide):

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

Les deux commandes sont la même chose.

Vous pouvez utiliser la syntaxe pour déclarer plusieurs objets:

int[] arrayOne, arrayTwo; //both arrays

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

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

19
George Strother

Aucune différence.

Citant de Sun :

Le [] peut apparaître en tant que partie du type au début de la déclaration, ou en tant que partie du déclarant pour une variable particulière, ou les deux, comme dans cet exemple: byte[] rowvector, colvector, matrix[];

Cette déclaration est équivalente à: byte rowvector[], colvector[], matrix[][];

13
Yuval Adam

Il n'y a pas de différence entre les deux. les deux déclarent un tableau de ints. Cependant, le premier est préférable car il conserve les informations de type au même endroit. Ce dernier n’est réellement pris en charge que pour le bénéfice des programmeurs C/C++ qui passent à Java.

11
Luke Woodward

Il n'y a pas de réelle différence. cependant,

double[] items = new double[10];

est préférable car il indique clairement que le type est un tableau.

11
Aaron Maenpaa

Les deux sont également valables. Le int puzzle[] La forme est cependant découragée, la int[] puzzle est préféré selon le conventions de codage . Voir aussi le fonctionnaire tutoriel sur les tableaux Java :

De même, vous pouvez déclarer des tableaux d'autres types:

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

Vous pouvez également placer les crochets après le nom du tableau:

float anArrayOfFloats[]; // this form is discouraged

Cependant, la convention décourage cette forme; les crochets identifient le type de tableau et doivent apparaître avec la désignation du type.

Notez le dernier paragraphe.

Je recommande de lire les tutoriels officiels Sun/Oracle plutôt que ceux de tiers. Sinon, vous risqueriez de finir par apprendre de mauvaises pratiques.

7
BalusC

C'est une forme alternative, empruntée à C, sur laquelle Java est basé.

À titre de curiosité, il existe trois façons de définir une méthode main valide en Java:

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

Il n'y a pas de différence, mais Sun recommande de le placer à côté du type comme expliqué ici

5
André

L'option la plus préférée est int[] a - car int[] est le type et a est le nom. (votre deuxième option est la même que celle-ci, avec un espace mal placé)

Fonctionnellement, il n'y a pas de différence entre eux.

3
Bozho

Le Spécification du langage Java dit:

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

Ils donneront donc exactement le même code d'octet.

3
Kdeveloper

Comme déjà indiqué, il n'y a pas beaucoup de différence (si vous déclarez une seule variable par ligne).

Notez que SonarQube considère votre deuxième cas comme un mineur code odeur:

Les indicateurs de tableau "[]" doivent figurer sur le type, pas sur la variable (calmar: S1197)

Les indicateurs de tableau doivent toujours être situés sur le type pour une meilleure lisibilité du code. Sinon, les développeurs doivent examiner à la fois le type et le nom de la variable pour savoir si une variable est un tableau ou non.

Exemple de code non conforme

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

Solution conforme

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

Ce sont les mêmes, mais il y a une différence importante entre ces déclarations:

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

dans 1. regular est juste un int, par opposition à 2. où regular et array sont des tableaux d'int.

La deuxième déclaration que vous avez est donc préférable, car elle est plus claire. Le premier formulaire est également déconseillé selon ce tutoriel sur Oracle .

2
Patrick

En Java, ce sont simplement différentes méthodes syntaxiques pour dire la même chose.

2
Zach Lute

Ils sont les mêmes. L'un est plus lisible (pour certains) que l'autre.

2
basszero

Ils sont complètement équivalents. int [] array est le style préféré. int array[] est simplement fourni en tant que style équivalent compatible C.

2
Derek Park

Il n'y a pas de différence de fonctionnalité entre les deux styles de déclaration. Les deux déclarent un tableau d'int.

Mais int[] a conserve les informations de type ensemble et est plus détaillé, donc je la préfère.

2
YoK

Les deux ont la même signification. Cependant, l’existence de ces variantes permet également ceci:

int[] a, b[];

qui est le même que:

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

Cependant, c'est un style de code horrible et ne devrait jamais être fait.

2

Oui, exactement pareil. Personnellement, je préfère

int[] integers; 

parce que cela rend immédiatement évident à quiconque lit votre code que des entiers sont un tableau d'int, par opposition à

int integers[];

ce qui ne rend pas tout cela évident, en particulier si vous avez plusieurs déclarations dans une ligne. Mais encore une fois, ils sont équivalents, donc cela revient à la préférence personnelle.

Consultez cette page sur les tableaux en Java pour des exemples plus détaillés.

1
David Watson

lors de la déclaration d'une seule référence de tableau, il n'y a pas beaucoup de différence entre elles. les deux déclarations suivantes sont donc identiques.

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

lors de la déclaration de plusieurs références de tableau, nous pouvons trouver une différence entre elles. les deux déclarations suivantes ont la même signification. en fait, c'est au programmeur de choisir lequel est suivi. mais la notation standard Java est recommandée.

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

Les deux sont bons. Je suggère d'en choisir un et de s'en tenir à cela. (Je fais le second)

0
Albert

Tandis que le int integers[] solution trouve ses racines dans le langage C (et peut donc être considéré comme une approche "normale"), beaucoup de gens trouvent int[] integers plus logique, car il ne permet pas de créer des variables de types différents (c’est-à-dire un int et un tableau) dans une déclaration (par opposition à la déclaration de style C).

0
Kos