回答:
それらは意味的に同一です。int array[]
構文はJavaだけに慣れるヘルプCプログラマに追加されました。
int[] array
はるかに望ましいですが、混乱が少なくなります。
int array[]
構文です。また、論理的...ねじれた方法で。:)
int array[]
私にはもっと理にかなっています。この宣言についてどう思いますか?int[] x, y
?あるy
配列かどうか?多分そうです、そうでないかもしれません。Javaの教祖だけが自信を持って答えることができます...
int[] x, y
、y
は配列([]
タイプに属するため)であり、の場合、配列int x[], y
でy
はありません([]
変数に属します)。
たまたま同じ宣言で複数の変数を宣言する場合、わずかな違いが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
。
いいえ、これらは同じです。しかしながら
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];
int[] a[];
だ- 決して不明瞭になるだろうありません;-)
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
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チュートリアルを読むことをお勧めします。そうでなければ、悪い習慣を学ぶことになるでしょう。
これは、C
Javaのベースとなっているから借用した代替形式です。
好奇心として、Javaで有効なメソッドを定義するには3つの方法がありますmain
。
public static void main(String[] args)
public static void main(String args[])
public static void main(String... args)
public static void main ( String \u005B \u005D args )
もできます。これも別のバリアントです。
String... param
、ある配列
, then why it is not possible to call a method like say
someMethod(1、2) `がsomeMethod
として定義されてsomeMethod ( int[] numbers )
いる場合、単純な疑問が生じます。配列は、引数が連続したメモリの場所からのものでなければならないことを要求しますが、varargs
最初に指定された引数から配列を作成します。さらに、varargs
配列の場合は同じではありませんが、aはメソッドの最後の引数にしかなりません。
meth(int... a)
、meth(1, 2)
またはとして呼び出すことができますmeth(new int[] {1, 2})
。Varargsは、最初のバージョンを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[][];
したがって、それらはまったく同じバイトコードになります。
どちらも同じ意味です。ただし、これらの亜種が存在すると、これも可能になります。
int[] a, b[];
これは次と同じです:
int[] a;
int[][] b;
ただし、これは恐ろしいコーディングスタイルであり、絶対に行わないでください。
それらは同じですが、これらのステートメントには重要な違いがあります。
// 1.
int regular, array[];
// 2.
int[] regular, array;
in 1. regularは単なるintです。2。regularとarrayはどちらもintの配列です。
したがって、2番目のステートメントの方がより明確であるため、優先されます。最初のフォームも、このOracleのチュートリアルでは推奨されていません。
すでに述べたように、大きな違いはありません(1行に1つの変数しか宣言しない場合)。
注意SonarQubeはマイナーのよう2番目のケースを扱うコードのにおい:
配列指定子「[]」は、変数ではなく型にある必要があります(squid:S1197)
コードを読みやすくするために、配列指定子は常に型に配置する必要があります。そうでない場合、開発者は型と変数名の両方を調べて、変数が配列であるかどうかを知る必要があります。
違反コード
int matrix[][]; // Noncompliant int[] matrix[]; // Noncompliant
準拠ソリューション
int[][] matrix; // Compliant
うん、まったく同じ。個人的には
int[] integers;
それはあなたのコードを読んでいる人に整数が整数の配列であることとは対照的に
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