int [] 배열과 int 배열 []의 차이점


234

최근 배열을 정의하는 두 가지 방법의 차이점에 대해 생각했습니다.

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

차이가 있습니까?

답변:


281

그것들은 의미 상 동일합니다. 이 int array[]구문은 C 프로그래머가 Java에 익숙해 지도록 돕기 위해 추가되었습니다.

int[] array 훨씬 바람직하고 혼란스럽지 않습니다.


55
[]은 (는) NAME이 아닌 TYPE의 일부입니다. 저에게는 이것이 가장 큰 차이점입니다.
André Chalella

4
@Andre-그리고 C에서는 선언 지정자가 아니라 선언자의 일부인 [] int array[]구문 이므로 구문이 사용됩니다. 또한 논리적으로 ... 꼬인 방식으로. :)
Kos

1
C는이 작은 게임을한다 :) 그리고 나는 그것이 매력적이라고 ​​생각한다 :) 심지어 ... 포인터조차도. 포인터의 '정확한'c 구문은 int * imAPointer입니다. 어리 석고 깔끔합니다.
ScarletAmaranth

4
int array[]나에게 더 의미가 있습니다. 이 선언에 대해 어떻게 생각하십니까? int[] x, y? y배열 인가 ? 아마 아닐 수도 있습니다. Java 전문가 만이 자신감있게 답변 할 수 있습니다.
user1508893

24
의 경우에 int[] x, y, y(때문에 배열 []유형에 속함), 그리고 경우에 int x[], y, y배열 (아니다 []변수에 속한다).
Triang3l

171

동일한 선언에서 둘 이상의 변수를 선언하면 약간의 차이가 있습니다.

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입니다.


52

다른 점이 없다.

나는 type[] name형식이 변수가 배열이라는 것이 분명하다는 것을 선호한다 .

편집하다:

아차가 있습니다 (한 번에 둘 이상의 변수를 선언하지 않기 때문에 잊어 버렸습니다).

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

27

아니요, 동일합니다. 하나

byte[] rowvector, colvector, matrix[];

다음과 같습니다.

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

Java 사양 에서 가져 왔습니다 . 그 의미는

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

다르다. 이러한 여러 선언 중 하나를 권장하지 않습니다. 읽기 가장 쉬운 것은 다음과 같습니다.

int[] a;
int[] b;

3
그러나 한 줄에 여러 식별자를 선언하는 대신 식별자 당 하나의 선언을 사용하는 것이 좋습니다.
rsp

@rsp-완전히 동의하고 모범 사례를 편집했습니다. 그럼에도 불구하고 모범 사례를 암시합니다.
Ishtar

25

Java 언어 사양의 10.2 섹션 에서 :

[]는 선언의 시작 부분에서 유형의 일부로, 또는이 예에서와 같이 특정 변수에 대한 선언자의 일부로 또는 둘 다로 나타날 수 있습니다.

 byte[] rowvector, colvector, matrix[];

이 선언은 다음과 같습니다.

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

개인적으로 거의 모든필자가 본 Java 코드는 첫 번째 형식을 사용하는데, 이는 변수에 대한 모든 유형 정보를 한 곳에 보관함으로써 더 의미가 있습니다. 나는 두 번째 형태가 허용되지 않기를 바랍니다.

다행히 내가 한 생각하지 않는 지금 이 (유효) 코드를 볼 수 :

String[] rectangular[] = new String[10][10];

고마워, 나는 이것에 대해 머리를 긁적이었다. 이상하게도, 질문의 제목을 인터넷 검색 할 때 나는 아무것도 발견하지 못했습니다.
Yoav

3
+1 두 번째 양식을 거부하는 것에 동의합니다. +1도 당신이 'n'매치를 섞을 수 있다는 것을 몰랐기 때문에 int[] a[];-그것은 결코 명확하지 않을 것입니다 ;-)
보헤미안


13

차이 없음.

태양 에서 인용 :

[]이 예에서와 같이 선언의 시작 유형의 일부로서, 또는 특정 변수 또는 모두에 대한 선언자의 일부로 나타날 수있다 :byte[] rowvector, colvector, matrix[];

이 선언은 다음과 같습니다. byte rowvector[], colvector[], matrix[][];


11

둘 사이에는 차이가 없습니다. 둘 다 ints 의 배열을 선언합니다 . 그러나 전자는 형식 정보를 모두 한 곳에 보관하기 때문에 선호됩니다. 후자는 Java로 이동하는 C / C ++ 프로그래머의 이익을 위해서만 실제로 지원됩니다.


11

실제 차이는 없습니다. 하나,

double[] items = new double[10];

유형이 배열임을 분명히 나타내므로 선호됩니다.


1
이중 항목 []를 C 프로그래머 정말이
스티브 쿠오

@Steve, 그게 내가 그렇게하는 이유입니다. :-)
Paul Tomblin

double items []가 타입을 명확하게 나타내고 나중에 아이템이 배열이된다는 반론을 할 수 있습니다.
MetroidFan2002

7

둘 다 똑같이 유효합니다. 그러나 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 자습서를 읽는 것이 좋습니다. 그렇지 않으면 나쁜 관행을 배우는 위험에 처하게됩니다.


6

대체 형식으로 빌린 것입니다. Cjava가 기반 입니다.

호기심 으로 Java에서 유효한 메소드 를 정의하는 가지 방법 이 있습니다 main.

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

1
존경심을 가지고이 질문에 대한 답은 !!!!! 지정된 세 번째 양식은 실제로 원래 게시물에 요청 된 내용으로 무엇이든해야합니다. 첫 번째 두 인수는 main 메소드에 대한 배열이지만 세 번째 엔티티는 가변 인수입니다 (배열과 동일하지 않음). 메인 메소드를 정의하는 것이 문제라면, 다른 메소드를 추가하여 메인 메소드를 정의하는 다른 양식을 추가 할 수도 있습니다 public static void main ( String \u005B \u005D args ).
좋은 암소

2
A는 예를 들어, 파라미터, 변수 인수 @nIcEcOw String... param, 배열
보헤미안

모두, 즉 문자열 배열 인 [] 및 문자열 ... 경우 단순한 의심이 발생 , then why it is not possible to call a method like say `하나가 정의되면 것으로 someMethod (1, 2) someMethodsomeMethod ( int[] numbers ). 배열은 인수가 인접한 메모리 위치에서 가져와야하지만 varargs, 제공된 인수에서 먼저 배열을 만들어야합니다. 또한 varargs배열의 경우도 같지 않지만 메소드의 최종 인수 만 될 수 있습니다.
좋은 암소

2
@nIcEcOw 그러나 배열로 varargs를 호출 meth(int... a)할 수 있습니다. 즉 meth(1, 2)or 또는 으로 호출 할 수 있습니다 meth(new int[] {1, 2}). Varargs는 첫 번째 버전을 두 번째 버전으로 바꾸는 구문 설탕입니다. 매개 변수의 실제 (바이트 코드) 유형은 배열 유형입니다. 마지막으로 생각하면, 다른 확실한 선택은 없습니다.
보헤미안


3

가장 선호되는 옵션은 유형 int[] a이므로 이름입니다. (두 번째 옵션은 공간이 잘못 배치 된 것과 동일합니다)int[]a

기능적으로는 차이가 없습니다.


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

따라서 그들은 정확히 같은 바이트 코드를 얻을 것입니다.


2

자바에서 이것들은 단순히 같은 것을 말하는 다른 구문 방법입니다.



2

그것들은 완전히 동일합니다. int [] array선호하는 스타일입니다. int array[]C 호환 스타일로 제공됩니다.


2

둘 다 같은 의미입니다. 그러나 이러한 변형이 있으면 다음과 같은 이점도 있습니다.

int[] a, b[];

이는 다음과 같습니다.

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

그러나 이것은 끔찍한 코딩 스타일이므로 절대로 수행해서는 안됩니다.


int [] a, b []; b는 다차원 배열이 됨
sadananda salam

2

두 가지 선언 스타일간에 기능에는 차이가 없습니다. 둘 다 int의 배열을 선언합니다.

그러나 int[] a 유형 정보를 함께 유지하고 더 장황하므로 선호합니다.


2

그것들은 동일하지만이 진술들 사이에는 중요한 차이점이 있습니다 :

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

1. regular와 array가 모두 int의 배열 인 반면 2. regular는 int입니다.

따라서 두 번째 진술은 더 명확하기 때문에 선호됩니다. 첫 번째 양식은 Oracle 에 대한 이 자습서에 따라 권장되지 않습니다 .


고마워요! 나는 두 번째 것을 가지고 갈 것입니다.
Espen

2

이미 언급했듯이 큰 차이는 없습니다 (한 줄에 하나의 변수 만 선언하면).

참고 SonarQube가 미성년자의로 두 번째 경우를 처리하는 코드 냄새 :

배열 지정자 "[]"는 변수가 아닌 유형에 있어야합니다 (오징어 : S1197)

더 나은 코드 가독성을 위해 배열 지정자는 항상 유형에 있어야합니다. 그렇지 않으면 개발자는 변수가 배열인지 여부를 알기 위해 유형과 변수 이름을 모두 봐야합니다.

비준수 코드 예

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

준수 솔루션

int[][] matrix;   // Compliant

1

그렇습니다. 개인적으로 선호합니다

int[] integers; 

코드를 읽는 사람에게는 정수가 정수의 배열이라는 것을 즉시 알 수 있기 때문입니다.

int integers[];

한 줄에 여러 개의 선언이있는 경우 특히 명확하지 않습니다. 그러나 다시 말하지만, 그것들은 동등하므로 개인적 취향에 달려 있습니다.

자세한 내용은 Java 배열에서이 페이지를 확인하십시오 .


1

단일 배열 참조를 선언 할 때 그 사이에는 큰 차이가 없습니다. 따라서 다음 두 선언은 동일합니다.

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

여러 개의 배열 참조를 선언 할 때 그 사이의 차이점을 찾을 수 있습니다. 다음 두 문장은 같은 의미입니다. 실제로, 그것은 따르는 프로그래머에 달려 있습니다. 그러나 표준 Java 표기법이 권장됩니다.

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

0

둘 다 괜찮습니다. 나는 하나를 골라서 붙일 것을 제안합니다. (나는 두 번째를한다)


0

반면 int integers[]C 언어에서 솔루션 뿌리 (따라서 "정상적인"방식으로 간주 될 수있다), 많은 사람들이 찾을 수 int[] integers는 다른 유형의 변수를 만들 허용하지으로 더 논리적 (예를 int 및 배열)에 반대 한 선언 (의 C 스타일 선언).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.