Câu trả lời:
Chúng giống hệt nhau về mặt ngữ nghĩa. Các int array[]
cú pháp chỉ được bổ sung vào các lập trình viên giúp đỡ C làm quen với java.
int[] array
là nhiều thích hợp hơn, và ít nhầm lẫn.
int array[]
cú pháp. Cũng logic ... theo một cách nào đó. :)
int array[]
có ý nghĩa hơn với tôi Bạn nghĩ gì về tuyên bố này? int[] x, y
? Là y
một mảng hay không? Có lẽ nó là, có thể nó không. Chỉ có các bậc thầy của Java mới có thể trả lời một cách tự tin ....
int[] x, y
, y
là một mảng (vì []
thuộc về loại) và trong trường hợp int x[], y
, y
không phải là một mảng ( []
thuộc về biến).
Có một sự khác biệt nhỏ, nếu bạn tình cờ khai báo nhiều hơn một biến trong cùng một khai báo:
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
Lưu ý rằng đây là phong cách mã hóa xấu, mặc dù trình biên dịch gần như chắc chắn sẽ bắt lỗi của bạn ngay khi bạn cố gắng sử dụng d
.
Không có sự khác biệt.
Tôi thích type[] name
định dạng tại là rõ ràng rằng biến là một mảng (ít nhìn xung quanh để tìm ra nó là gì).
BIÊN TẬP:
Đợi đã, có một sự khác biệt (tôi quên vì tôi không bao giờ khai báo nhiều hơn một biến tại một thời điểm):
int[] foo, bar; // both are arrays
int foo[], bar; // foo is an array, bar is an int.
Không, đây là như nhau. Tuy nhiên
byte[] rowvector, colvector, matrix[];
tương đương với:
byte rowvector[], colvector[], matrix[][];
Lấy từ Đặc tả Java . Đó nghĩa là
int a[],b;
int[] a,b;
là khác nhau Tôi sẽ không đề nghị một trong nhiều tuyên bố này. Dễ nhất để đọc sẽ (có thể) là:
int[] a;
int[] b;
Từ phần 10.2 của Đặc tả ngôn ngữ Java :
[] Có thể xuất hiện như một phần của loại ở đầu khai báo hoặc là một phần của công cụ khai báo cho một biến cụ thể hoặc cả hai, như trong ví dụ này:
byte[] rowvector, colvector, matrix[];
Tuyên bố này tương đương với:
byte rowvector[], colvector[], matrix[][];
Cá nhân gần như tất cả các mã Java mà tôi từng thấy sử dụng mẫu đầu tiên, điều này có ý nghĩa hơn bằng cách giữ tất cả các thông tin loại về biến ở một nơi. Tôi ước gì hình thức thứ hai không được phép, thành thật mà nói ... nhưng đó là cuộc sống ...
May mắn là tôi không nghĩ rằng tôi đã từng thấy mã (hợp lệ) này:
String[] rectangular[] = new String[10][10];
int[] a[];
- điều đó sẽ không bao giờ không rõ ràng ;-)
Hai lệnh là cùng một điều.
Bạn có thể sử dụng cú pháp để khai báo nhiều đối tượng:
int[] arrayOne, arrayTwo; //both arrays
int arrayOne[], intOne; //one array one int
xem: http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html
Không khác nhau.
Trích dẫn từ Sun :
Cái
[]
có thể xuất hiện như một phần của kiểu ở đầu khai báo hoặc là một phần của trình khai báo cho một biến cụ thể hoặc cả hai, như trong ví dụ này:byte[] rowvector, colvector, matrix[];
Tuyên bố này tương đương với:
byte rowvector[], colvector[], matrix[][];
Không có bất kỳ sự khác biệt giữa hai; cả hai khai báo một mảng của int
s. Tuy nhiên, trước đây được ưa thích vì nó giữ tất cả các thông tin loại ở một nơi. Cái sau chỉ thực sự được hỗ trợ vì lợi ích của các lập trình viên C / C ++ khi chuyển sang Java.
Không có sự khác biệt thực sự; Tuy nhiên,
double[] items = new double[10];
được ưa thích vì nó chỉ rõ rằng loại là một mảng.
Cả hai đều có giá trị như nhau. Các int puzzle[]
tuy nhiên hình thức không được khuyến khích, sự int[] puzzle
được ưa thích theo công ước mã hóa . Xem thêm hướng dẫn mảng Java chính thức :
Tương tự, bạn có thể khai báo mảng các loại khác:
byte[] anArrayOfBytes; short[] anArrayOfShorts; long[] anArrayOfLongs; float[] anArrayOfFloats; double[] anArrayOfDoubles; boolean[] anArrayOfBooleans; char[] anArrayOfChars; String[] anArrayOfStrings;
Bạn cũng có thể đặt dấu ngoặc vuông sau tên của mảng:
float anArrayOfFloats[]; // this form is discouraged
Tuy nhiên, quy ước không khuyến khích hình thức này; dấu ngoặc xác định kiểu mảng và sẽ xuất hiện với chỉ định kiểu.
Lưu ý đoạn cuối.
Tôi khuyên bạn nên đọc các hướng dẫn chính thức của Sun / Oracle thay vì một số bên thứ 3. Nếu không, bạn sẽ có nguy cơ cuối cùng trong việc học tập thực hành xấu.
Nó là một hình thức thay thế, được mượn từ C
, dựa trên java.
Vì tò mò, có ba cách để xác định một main
phương thức hợp lệ trong java:
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 )
, đây cũng là một biến thể khác.
String... param
, là một mảng
, then why it is not possible to call a method like say
someMethod (1, 2) `nếu một định nghĩa someMethod
là someMethod ( int[] numbers )
. Mảng yêu cầu rằng đối số, phải từ vị trí bộ nhớ liền kề, tuy nhiên varargs
, sẽ tạo ra một mảng trong số các đối số được cung cấp trước tiên. Hơn nữa, một varargs
chỉ có thể là đối số cuối cùng của một phương thức, mặc dù điều tương tự không đúng với một mảng.
meth(int... a)
có thể được gọi là một trong hai meth(1, 2)
hoặc meth(new int[] {1, 2})
. Varargs là cú pháp đường biến phiên bản đầu tiên thành phiên bản thứ hai. Kiểu thực tế (mã byte) của tham số là kiểu mảng. Về việc phải là người cuối cùng, nếu bạn nghĩ về nó, không có lựa chọn lành mạnh nào khác.
Các ngôn ngữ Java Specification nói:
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[][];
Do đó, chúng sẽ dẫn đến chính xác cùng một mã byte.
Chúng hoàn toàn tương đương. int [] array
là phong cách ưa thích. int array[]
chỉ được cung cấp như một kiểu tương thích, tương thích C.
Cả hai đều có cùng một ý nghĩa. Tuy nhiên, sự tồn tại của các biến thể này cũng cho phép điều này:
int[] a, b[];
tương tự như:
int[] a;
int[][] b;
Tuy nhiên, đây là phong cách mã hóa khủng khiếp và không bao giờ nên được thực hiện.
Chúng giống nhau, nhưng có một sự khác biệt quan trọng giữa các tuyên bố này:
// 1.
int regular, array[];
// 2.
int[] regular, array;
trong 1. thông thường chỉ là một int, trái ngược với 2. trong đó cả hai thông thường và mảng là các mảng của int.
Tuyên bố thứ hai bạn có do đó được ưa thích, vì nó rõ ràng hơn. Hình thức đầu tiên cũng không được khuyến khích theo hướng dẫn này trên Oracle .
Như đã nêu, không có nhiều khác biệt (nếu bạn chỉ khai báo một biến trên mỗi dòng).
Lưu ý rằng SonarQube coi trường hợp thứ hai của bạn là mùi mã nhỏ :
Chỉ định mảng "[]" phải thuộc loại chứ không phải biến (squid: S1197)
Các trình chỉ định mảng phải luôn được đặt trên loại để dễ đọc mã hơn. Mặt khác, các nhà phát triển phải nhìn cả vào loại và tên biến để biết liệu một biến có phải là một mảng hay không.
Ví dụ mã không tuân thủ
int matrix[][]; // Noncompliant int[] matrix[]; // Noncompliant
Giải pháp tuân thủ
int[][] matrix; // Compliant
Đúng, giống hệt nhau. Cá nhân, tôi thích
int[] integers;
bởi vì nó làm cho nó rõ ràng ngay lập tức đối với bất kỳ ai đọc mã của bạn rằng số nguyên là một mảng của int, trái ngược với
int integers[];
điều này không làm cho nó trở nên rõ ràng, đặc biệt nếu bạn có nhiều khai báo trong một dòng. Nhưng một lần nữa, chúng là tương đương, vì vậy nó đi xuống theo sở thích cá nhân.
Kiểm tra trang này trên các mảng trong Java để biết thêm các ví dụ chuyên sâu.
khi khai báo một tham chiếu mảng đơn, không có nhiều khác biệt giữa chúng. do đó hai khai báo sau là như nhau.
int a[]; // comfortable to programmers who migrated from C/C++
int[] a; // standard java notation
khi khai báo nhiều tham chiếu mảng, chúng ta có thể tìm thấy sự khác biệt giữa chúng. hai câu sau đây có nghĩa giống nhau. trong thực tế, nó phụ thuộc vào lập trình viên. nhưng ký hiệu java tiêu chuẩn được khuyến nghị.
int a[],b[],c[]; // three array references
int[] a,b,c; // three array references
Mặc dù int integers[]
giải pháp bắt nguồn từ ngôn ngữ C (và do đó có thể được coi là cách tiếp cận "bình thường"), nhiều người thấy int[] integers
hợp lý hơn vì nó không cho phép tạo các biến có kiểu khác nhau (ví dụ như một int và một mảng) trong một khai báo (trái ngược với khai báo kiểu C).