256

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

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

違いはありますか?

4

26 に答える 26

311

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

int[] arrayはるかに好ましく、混乱も少なくなります。

于 2008-09-24T19:08:05.550 に答える
187

同じ宣言で複数の変数を宣言する場合、わずかな違いが 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

于 2008-09-24T19:12:35.650 に答える
59

違いはありません。

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

編集:

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

int[] foo, bar; // both are arrays
int foo[], bar; // foo is an array, bar is an int.
于 2009-02-25T19:59:44.937 に答える
31

いいえ、これらは同じです。でも

byte[] rowvector, colvector, matrix[];

と同等です:

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

Java仕様から取得。つまり、

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

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

int[] a;
int[] b;
于 2010-10-02T14:16:28.367 に答える
28

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

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

 byte[] rowvector, colvector, matrix[];

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

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

個人的には、私が今まで見たほとんどすべての Java コードで最初の形式が使用されています。これは、変数に関するすべての型情報を 1 か所に保持することで、より理にかなっています。正直なところ、2 番目のフォームが許可されていないことを願っています...しかし、それが人生です...

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

String[] rectangular[] = new String[10][10];
于 2011-09-22T21:50:33.450 に答える
22

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

于 2008-09-24T19:10:48.930 に答える
14

変わりはない。

Sunからの引用:

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

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

于 2009-01-18T10:30:50.930 に答える
12

実際の違いはありません。でも、

double[] items = new double[10];

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

于 2009-02-25T20:00:57.070 に答える
12

両者に違いはありません。どちらも s の配列を宣言しintます。ただし、型情報をすべて 1 か所に保持するため、前者が推奨されます。後者は、Java に移行する C/C++ プログラマーの利益のためにのみ実際にサポートされています。

于 2009-01-18T10:29:06.407 に答える
8

Cこれは、 Java のベースとなっているから借用された代替形式です。

興味深いことに、Javaで有効なメソッドを定義する方法は3 つあります。main

  • public static void main(String[] args)
  • public static void main(String args[])
  • public static void main(String... args)
于 2011-09-22T21:48:21.853 に答える
8

どちらも等しく有効です。ただし、この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 チュートリアルを読むことをお勧めします。そうしないと、悪い慣行を学ぶことになるリスクがあります。

于 2011-09-22T21:48:59.950 に答える
5

違いはありませんが、ここで説明されているように、タイプの横に置くことを Sun は推奨しています。

于 2008-09-24T19:09:33.677 に答える
3

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

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

于 2010-10-02T14:14:31.853 に答える
3

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

機能的には両者に違いはありません。

于 2010-10-02T14:13:33.290 に答える
2

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

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

于 2010-10-02T14:18:11.793 に答える
2

どちらも同じ意味です。ただし、これらのバリアントの存在により、次のことも可能になります。

int[] a, b[];

これは次と同じです:

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

ただし、これはひどいコーディングスタイルであり、絶対に行わないでください。

于 2010-10-02T14:18:46.430 に答える
2

Java では、これらは単に同じことを言う別の構文方法です。

于 2008-09-24T19:08:05.690 に答える
2

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

于 2008-09-24T19:08:18.420 に答える
2

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

于 2008-09-24T19:08:55.143 に答える
2

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

SonarQubeは 2 番目のケースをマイナーコードの匂いとして扱うことに注意してください。

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

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

違反コード例

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

準拠ソリューション

int[][] matrix;   // Compliant
于 2017-01-25T15:21:19.803 に答える
2

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

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

1.regular は単なる int であるのに対し、2.regular と array は両方とも int の配列です。

したがって、あなたが持っている2番目のステートメントは、より明確であるため、優先されます. このチュートリアルによると、最初の形式もお勧めできませんOracle

于 2010-10-24T10:07:18.310 に答える
1

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.

于 2010-10-24T10:03:55.847 に答える
0

ソリューションは C 言語に根ざしていint integers[]ますが (したがって、「通常の」アプローチと見なすことができます)、多くの人はint[] integers、1 つの宣言で異なる型 (つまり、int と配列) の変数を作成することを許可していないため、より論理的であると考えています ( C スタイルの宣言)。

于 2010-10-24T11:50:38.067 に答える
0

Both are ok. I suggest to pick one and stick with it. (I do the second one)

于 2010-10-24T10:03:57.713 に答える