web-dev-qa-db-ja.com

int []配列とint array []の違い

私は最近、配列を定義する2つの方法の違いについて考えています。

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

違いはありますか?

222
mslot

それらは意味的に同一です。 int array[]構文は、CプログラマがJavaに慣れるのを助けるためにのみ追加されました。

int[] arrayの方がはるかに好ましく、混乱が少ないです。

268
skaffman

同じ宣言で複数の変数を宣言する場合、わずかな違いが1つあります。

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

これは悪いコーディングスタイルですが、dを使用しようとすると、コンパイラーはほとんど間違いなくエラーをキャッチします。

167
Adam Rosenfield

違いはありません。

type[] name形式は、変数が配列であることは明らかです(それが何であるかを調べるために周りを見回すことはありません)。

編集:

違いがあるのを待ってください(一度に複数の変数を宣言することはないので忘れていました):

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

いいえ、これらは同じです。しかしながら

byte[] rowvector, colvector, matrix[];

以下と同等です:

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

Java Specification から取得。つまり

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

異なっています。これらの複数の宣言のいずれもお勧めしません。読みやすいのは(おそらく)次のとおりです。

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

Java言語仕様のセクション10.2 から:

[]は、次の例のように、宣言の開始時に型の一部として、特定の変数の宣言子の一部として、またはその両方として表示される場合があります。

 byte[] rowvector, colvector, matrix[];

この宣言は次と同等です:

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

個人的にほとんどall私が今まで見たJavaコードは最初の形式を使用します。 1つの場所の変数について。正直に言うと、2番目のフォームが許可されないようにしたいのですが...

幸いなことに、私はこの(有効な)コードを見たeverとは思わない:

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

2つのコマンドは同じものです。

構文を使用して、複数のオブジェクトを宣言できます。

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

19
George Strother

違いはありません。

Sun からの引用:

[]は、この例のように、宣言の先頭にある型の一部として、または特定の変数の宣言子の一部として、またはその両方として表示される場合があります。byte[] rowvector, colvector, matrix[];

この宣言は次と同等です:byte rowvector[], colvector[], matrix[][];

13
Yuval Adam

2つの間に違いはありません。両方ともintsの配列を宣言します。ただし、タイプ情報をすべて1か所に保持するため、前者の方が適しています。後者は、Javaに移行するC/C++プログラマの利益のためにのみ実際にサポートされています。

11
Luke Woodward

実際の違いはありません。しかしながら、

double[] items = new double[10];

型が配列であることを明確に示すため、推奨されます。

11
Aaron Maenpaa

両方とも等しく有効です。ただし、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の公式チュートリアルを読むことをお勧めします。そうしないと、悪い慣習を学ぶことになりかねません。

7
BalusC

これは、Javaが基づいているCから借用された代替形式です。

好奇心として、Javaで有効なmainメソッドを定義するthreeの方法があります。

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

違いはありませんが、説明されているように、タイプの隣に置くことをお勧めします here

5
André

最も好ましいオプションはint[] aです-int[]がタイプで、aが名前であるためです。 (2番目のオプションはこれと同じですが、スペースが間違っています)

機能的にはそれらの間に違いはありません。

3
Bozho

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

したがって、まったく同じバイトコードになります。

3
Kdeveloper

すでに述べたように、大きな違いはありません(1行に1つの変数のみを宣言する場合)。

SonarQube は2番目のケースをマイナーコードの匂いとして扱います:

配列指定子「[]」は、変数ではなく型上にある必要があります(squid:S1197)

コードを読みやすくするために、配列指定子は常に型に配置する必要があります。それ以外の場合、開発者は型と変数名の両方を見て、変数が配列であるかどうかを知る必要があります。

違反コード例

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

適合ソリューション

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

これらは同じですが、これらのステートメントには重要な違いがあります。

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

in 1. regularはintの配列であり、regularとarrayはintの配列です。

したがって、より明確であるため、2番目のステートメントが優先されます。最初の形式も Oracleのこのチュートリアル に従って推奨されません。

2
Patrick

Javaでは、これらは同じことを言うための単なる異なる構文方法です。

2
Zach Lute

彼らは同じです。 1つは他の人よりも(一部の人にとって)読みやすい.

2
basszero

それらは完全に同等です。 int [] arrayが優先スタイルです。 int array[]は、同等のC互換スタイルとして提供されています。

2
Derek Park

両方の宣言スタイルの間で機能に違いはありません。両方ともintの配列を宣言します。

しかし、int[] aは型情報をまとめて保持し、より冗長なので、私はそれを好みます。

2
YoK

両方とも同じ意味です。ただし、これらのバリアントが存在するため、これも可能になります。

int[] a, b[];

次と同じです:

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

ただし、これは恐ろしいコーディングスタイルであり、実行しないでください。

2

はい、まったく同じです。個人的に、私は好む

int[] integers; 

コードを読んでいる人にとって、整数がintの配列であることとは対照的に、

int integers[];

これは、特に1行に複数の宣言がある場合は、それほど明確にはなりません。しかし、再び、それらは同等であるため、個人的な好みに帰着します。

詳細な例については、 Javaの配列に関するこのページ をご覧ください。

1
David Watson

単一の配列参照を宣言するとき、それらの間に大きな違いはありません。したがって、次の2つの宣言は同じです。

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

複数の配列参照を宣言すると、それらの違いを見つけることができます。次の2つのステートメントは同じ意味です。実際、どちらをフォローするかはプログラマー次第です。ただし、標準のJava表記が推奨されます。

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

両方とも大丈夫です。私は1つを選んでそれに固執することを提案します。 (2番目の操作を行います)

0
Albert

int integers[]ソリューションはC言語に根ざします(したがって、「通常の」アプローチと見なすことができます)が、多くの人々はint[] integersが異なるタイプの変数(つまり、配列)を1つの宣言で(Cスタイルの宣言とは対照的に)。

0
Kos