私は最近、配列を定義する 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仕様から取得。つまり、
int a[],b;
int[] a,b;
異なっています。これらの複数の宣言のどちらもお勧めしません。読みやすいのは(おそらく)次のとおりです。
int[] a;
int[] b;
[] は、次の例のように、宣言の先頭の型の一部として、または特定の変数の宣言子の一部として、またはその両方として表示される場合があります。
byte[] rowvector, colvector, matrix[];
この宣言は次と同等です。
byte rowvector[], colvector[], matrix[][];
個人的には、私が今まで見たほとんどすべての Java コードで最初の形式が使用されています。これは、変数に関するすべての型情報を 1 か所に保持することで、より理にかなっています。正直なところ、2 番目のフォームが許可されていないことを願っています...しかし、それが人生です...
幸いなことに、私はこの (有効な) コードを見たことがないと思います:
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[][];
実際の違いはありません。でも、
double[] items = new double[10];
型が配列であることを明確に示しているため、推奨されます。
両者に違いはありません。どちらも s の配列を宣言しint
ます。ただし、型情報をすべて 1 か所に保持するため、前者が推奨されます。後者は、Java に移行する C/C++ プログラマーの利益のためにのみ実際にサポートされています。
C
これは、 Java のベースとなっているから借用された代替形式です。
興味深いことに、Javaで有効なメソッドを定義する方法は3 つあります。main
public static void main(String[] args)
public static void main(String args[])
public static void main(String... args)
どちらも等しく有効です。ただし、この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 チュートリアルを読むことをお勧めします。そうしないと、悪い慣行を学ぶことになるリスクがあります。
違いはありませんが、ここで説明されているように、タイプの横に置くことを Sun は推奨しています。
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
- です。これint[]
は、 がタイプで、a
が名前であるためです。(2番目のオプションはこれと同じですが、スペースが間違っています)
機能的には両者に違いはありません。
両方の宣言スタイル間で機能に違いはありません。どちらもintの配列を宣言します。
しかしint[] a
、型情報をまとめて保持し、より冗長なので、私はそれを好みます。
どちらも同じ意味です。ただし、これらのバリアントの存在により、次のことも可能になります。
int[] a, b[];
これは次と同じです:
int[] a;
int[][] b;
ただし、これはひどいコーディングスタイルであり、絶対に行わないでください。
Java では、これらは単に同じことを言う別の構文方法です。
彼らは同じです。一方は他方よりも(一部の人にとって)読みやすいです。
それらは完全に同等です。 int [] array
が好ましいスタイルです。 int array[]
同等の C 互換スタイルとして提供されているだけです。
既に述べたように、大きな違いはありません (1 行に 1 つの変数のみを宣言する場合)。
SonarQubeは 2 番目のケースをマイナーコードの匂いとして扱うことに注意してください。
配列指定子 "[]" は、変数ではなく型にある必要があります (squid:S1197)
コードを読みやすくするために、配列指定子は常に型に配置する必要があります。それ以外の場合、開発者は型と変数名の両方を調べて、変数が配列かどうかを判断する必要があります。
違反コード例
int matrix[][]; // Noncompliant int[] matrix[]; // Noncompliant
準拠ソリューション
int[][] matrix; // Compliant
これらは同じですが、これらのステートメントには重要な違いがあります。
// 1.
int regular, array[];
// 2.
int[] regular, array;
1.regular は単なる int であるのに対し、2.regular と array は両方とも int の配列です。
したがって、あなたが持っている2番目のステートメントは、より明確であるため、優先されます. このチュートリアルによると、最初の形式もお勧めできませんOracle。
Yep, exactly the same. Personally, I prefer
int[] integers;
because it makes it immediately obvious to anyone reading your code that integers is an array of int's, as opposed to
int integers[];
which doesn't make it all that obvious, particularly if you have multiple declarations in one line. But again, they are equivalent, so it comes down to personal preference.
Check out this page on arrays in Java for more in depth examples.
ソリューションは C 言語に根ざしていint integers[]
ますが (したがって、「通常の」アプローチと見なすことができます)、多くの人はint[] integers
、1 つの宣言で異なる型 (つまり、int と配列) の変数を作成することを許可していないため、より論理的であると考えています ( C スタイルの宣言)。
Both are ok. I suggest to pick one and stick with it. (I do the second one)