私は最近、配列を定義する2つの方法の違いについて考えています。
int[] array
int array[]
違いはありますか?
それらは意味的に同一です。 int array[]
構文は、CプログラマがJavaに慣れるのを助けるためにのみ追加されました。
int[] array
の方がはるかに好ましく、混乱が少ないです。
同じ宣言で複数の変数を宣言する場合、わずかな違いが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
を使用しようとすると、コンパイラーはほとんど間違いなくエラーをキャッチします。
違いはありません。
type[] name
形式は、変数が配列であることは明らかです(それが何であるかを調べるために周りを見回すことはありません)。
編集:
違いがあるのを待ってください(一度に複数の変数を宣言することはないので忘れていました):
int[] foo, bar; // both are arrays
int foo[], bar; // foo is an array, bar is an int.
いいえ、これらは同じです。しかしながら
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[][];
個人的にほとんどall私が今まで見たJavaコードは最初の形式を使用します。 1つの場所の変数について。正直に言うと、2番目のフォームが許可されないようにしたいのですが...
幸いなことに、私はこの(有効な)コードを見たeverとは思わない:
String[] rectangular[] = new String[10][10];
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
違いはありません。
Sun からの引用:
[]
は、この例のように、宣言の先頭にある型の一部として、または特定の変数の宣言子の一部として、またはその両方として表示される場合があります。byte[] rowvector, colvector, matrix[];
この宣言は次と同等です:
byte rowvector[], colvector[], matrix[][];
2つの間に違いはありません。両方ともint
sの配列を宣言します。ただし、タイプ情報をすべて1か所に保持するため、前者の方が適しています。後者は、Javaに移行するC/C++プログラマの利益のためにのみ実際にサポートされています。
実際の違いはありません。しかしながら、
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の公式チュートリアルを読むことをお勧めします。そうしないと、悪い慣習を学ぶことになりかねません。
これは、Javaが基づいているC
から借用された代替形式です。
好奇心として、Javaで有効なmain
メソッドを定義するthreeの方法があります。
public static void main(String[] args)
public static void main(String args[])
public static void main(String... args)
違いはありませんが、説明されているように、タイプの隣に置くことをお勧めします here
最も好ましいオプションはint[] a
です-int[]
がタイプで、a
が名前であるためです。 (2番目のオプションはこれと同じですが、スペースが間違っています)
機能的にはそれらの間に違いはありません。
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[][];
したがって、まったく同じバイトコードになります。
すでに述べたように、大きな違いはありません(1行に1つの変数のみを宣言する場合)。
SonarQube は2番目のケースをマイナーコードの匂いとして扱います:
配列指定子「[]」は、変数ではなく型上にある必要があります(squid:S1197)
コードを読みやすくするために、配列指定子は常に型に配置する必要があります。それ以外の場合、開発者は型と変数名の両方を見て、変数が配列であるかどうかを知る必要があります。
違反コード例
int matrix[][]; // Noncompliant int[] matrix[]; // Noncompliant
適合ソリューション
int[][] matrix; // Compliant
これらは同じですが、これらのステートメントには重要な違いがあります。
// 1.
int regular, array[];
// 2.
int[] regular, array;
in 1. regularはintの配列であり、regularとarrayはintの配列です。
したがって、より明確であるため、2番目のステートメントが優先されます。最初の形式も Oracleのこのチュートリアル に従って推奨されません。
Javaでは、これらは同じことを言うための単なる異なる構文方法です。
彼らは同じです。 1つは他の人よりも(一部の人にとって)読みやすい.
それらは完全に同等です。 int [] array
が優先スタイルです。 int array[]
は、同等のC互換スタイルとして提供されています。
両方の宣言スタイルの間で機能に違いはありません。両方ともintの配列を宣言します。
しかし、int[] a
は型情報をまとめて保持し、より冗長なので、私はそれを好みます。
両方とも同じ意味です。ただし、これらのバリアントが存在するため、これも可能になります。
int[] a, b[];
次と同じです:
int[] a;
int[][] b;
ただし、これは恐ろしいコーディングスタイルであり、実行しないでください。
はい、まったく同じです。個人的に、私は好む
int[] integers;
コードを読んでいる人にとって、整数がintの配列であることとは対照的に、
int integers[];
これは、特に1行に複数の宣言がある場合は、それほど明確にはなりません。しかし、再び、それらは同等であるため、個人的な好みに帰着します。
詳細な例については、 Javaの配列に関するこのページ をご覧ください。
単一の配列参照を宣言するとき、それらの間に大きな違いはありません。したがって、次の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つを選んでそれに固執することを提案します。 (2番目の操作を行います)
int integers[]
ソリューションはC言語に根ざします(したがって、「通常の」アプローチと見なすことができます)が、多くの人々はint[] integers
が異なるタイプの変数(つまり、配列)を1つの宣言で(Cスタイルの宣言とは対照的に)。