Gần đây tôi đã suy nghĩ về sự khác biệt giữa hai cách xác định một mảng:Sự khác nhau giữa int [] array và int array []
int[] array
int array[]
Có một sự khác biệt?
Gần đây tôi đã suy nghĩ về sự khác biệt giữa hai cách xác định một mảng:Sự khác nhau giữa int [] array và int array []
int[] array
int array[]
Có một sự khác biệt?
Chúng giống nhau về mặt ngữ nghĩa. Cú pháp int array[]
chỉ được thêm vào để giúp các lập trình viên C quen với java.
int[] array
thích hợp hơn và ít khó hiểu hơn.
Trong Java, đây chỉ đơn giản là các phương pháp cú pháp khác nhau để nói cùng một điều.
Chúng giống nhau. Một là dễ đọc hơn (đối với một số) so với cái kia.
Chúng hoàn toàn tương đương. int [] array
là kiểu ưa thích. int array[]
chỉ được cung cấp dưới dạng tương đương với kiểu C tương thích.
Không có sự khác biệt, nhưng Sun khuyên nên đặt nó bên cạnh các loại như đã giải thích here
Hai lệnh là những điều tương tự.
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
see: http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html
Có một khác biệt nhỏ, nếu bạn xảy ra để khai báo nhiều hơn một biến trong khai báo giống nhau:
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à kiểu mã hóa kém, 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 vào lúc bạn cố gắng sử dụng d
.
Không có sự khác biệt nào giữa hai loại; cả hai tuyên bố một mảng của int
s. Tuy nhiên, trước đây được ưu tiên vì nó giữ tất cả thông tin về 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++ chuyển sang Java.
Không có sự khác biệt.
Trích dẫn từ Sun:
Các
[]
có thể xuất hiện như là một phần của các loại ở phần đầu của việc kê khai, hoặc như một phần của declarator cho một biến cụ thể, hoặc cả hai, như trong ví dụ này:byte[] rowvector, colvector, matrix[];
khai này tương đương với:
byte rowvector[], colvector[], matrix[][];
không có nhiều loại kh rence.
Tôi thích định dạng type[] name
tại là rõ ràng rằng biến là một mảng (ít tìm xung quanh để tìm hiểu nó là gì).
EDIT:
Oh chờ đợi có sự khác biệt (tôi quên bởi vì tôi không bao giờ tuyên bố 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 có sự khác biệt thực; tuy nhiên,
double[] items = new double[10];
được ưu tiên vì nó cho biết rõ ràng loại đó là một mảng.
các mục kép [] thực sự là dành cho các lập trình viên C –
@Steve, Đó chắc chắn là lý do tại sao tôi tiếp tục thực hiện theo cách đó. :-) –
Hãy xem: public static void main (String [] args) .... Tôi sử dụng sau. – OscarRyz
Tùy chọn được ưu tiên nhất là int[] a
- bởi vì int[]
là loại và a
là tên. (tùy chọn thứ 2 của bạn giống như vậy, với không gian bị thất lạc)
Chức năng không có sự khác biệt giữa chúng.
Các Java Language 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 đó họ sẽ cho kết quả chính xác cùng mã byte.
Không, chúng giống nhau. Tuy nhiên
byte[] rowvector, colvector, matrix[];
tương đương với:
byte rowvector[], colvector[], matrix[][];
Taken từ Java Specification. Điều đó có nghĩa là
int a[],b;
int []a,b;
khác nhau. Tôi sẽ không đề nghị một trong hai khai báo này. Dễ nhất để đọc (có thể) là:
int[] a;
int[] b;
Không có sự khác biệt về chức năng giữa cả hai kiểu khai báo. Cả hai khai báo mảng int.
Nhưng int[] a
giữ thông tin loại với nhau và tiết lộ nhiều hơn vì vậy tôi thích nó hơn.
Cả hai đều có cùng ý nghĩa. Tuy nhiên, sự tồn tại của các biến thể cũng cho phép này:
int[] a, b[];
mà là giống 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.
bạn muốn nói, int [] a, b []; b trở thành mảng đa chiều –
+1, vâng, tuyệt, không bao giờ nghĩ về nó. –
Đúng, chính xác như nhau.Cá nhân, tôi thích
int[] integers;
vì nó làm cho nó ngay lập tức rõ ràng cho bất cứ ai đọc mã của bạn mà số nguyên là một mảng int, như trái ngược với
int integers[];
mà không làm cho nó tất cả những gì 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, do đó, nó đi xuống đến sở thích cá nhân.
Khám phá this page on arrays in Java để biết thêm thông tin chi tiết.
Cả hai đều ổn. Tôi đề nghị chọn một và gắn bó với nó. (Tôi làm cái thứ hai)
Họ đều giống nhau, nhưng có một sự khác biệt quan trọng giữa các báo cáo:
// 1.
int regular, array[];
// 2.
int[] regular, array;
trong 1. thường xuyên chỉ là một int, như trái ngược với 2. nơi cả hai thường xuyên và mảng là mảng int.
Câu lệnh thứ hai mà bạn có được ưu tiên, vì nó rõ ràng hơn. Biểu mẫu đầu tiên cũng không được khuyến khích theo số this tutorial on Oracle.
Thanx tất cả! Tôi sẽ đi với thứ hai và gắn bó với nó. – Espen
Trong khi các gốc giải pháp int integers[]
trong ngôn ngữ C (và do đó có thể được coi là phương pháp "bình thường"), nhiều người tìm thấy int[] integers
hợp lý hơn vì nó không cho phép tạo các biến khác nhau (ví dụ: int và mảng) một tuyên bố (trái với tuyên bố kiểu C).
Đây là một hình thức thay thế, được mượn từ C
, dựa trên nền tảng java.
Như một sự tò mò, có ba cách để xác định một phương pháp hợp lệ main
trong java:
public static void main(String[] args)
public static void main(String args[])
public static void main(String... args)
Với sự tôn trọng, nhưng câu trả lời của câu hỏi này là !!!!! Là hình thức thứ ba, được chỉ định, thực sự phải làm bất cứ điều gì, với những gì đang được hỏi trong bài gốc. Hai đối số đầu tiên là mảng cho phương thức chính, mặc dù thực thể thứ ba là đối số biến (không giống như một mảng). Nếu định nghĩa phương thức chính là câu hỏi, thì người ta có thể thêm một biểu mẫu khác để định nghĩa một phương thức chính nữa, như 'public static void main (String \ u005B \ u005D args)', đây cũng là một biến thể khác nữa. –
@nIcEcOw tham số varargs, ví dụ 'Chuỗi ... param', * là * một mảng – Bohemian
Chỉ là một nghi ngờ đơn giản phát sinh, nếu cả hai mảng là String [] và String ...', thì tại sao không thể để gọi một phương thức như nói 'someMethod (1, 2)' nếu ta định nghĩa 'someMethod' là' someMethod (int [] numbers) '. Mảng yêu cầu đối số, phải từ vị trí bộ nhớ liền kề, mặc dù 'varargs', sẽ làm cho 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 này cũng không đúng cho một mảng. –
Cả hai đều là giá trị ngang nhau. Tuy nhiên, hình thức int puzzle[]
không được khuyến khích, int[] puzzle
được ưu tiên theo coding conventions. Xem thêm chính thức Java arrays tutorial:
Tương tự như vậy, bạn có thể khai báo mảng của 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 các 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; các dấu ngoặc xác định loại mảng và sẽ xuất hiện với chỉ định kiểu.
Lưu ý đoạn cuối cùng.
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ố hướng dẫn của bên thứ ba.Nếu không, bạn sẽ gặp rủi ro khi học các thực hành xấu.
Từ section 10.2 of the Java Language Specification:
Các [] có thể xuất hiện như là một phần của các loại ở phần đầu của việc kê khai, hoặc như một phần của declarator cho một biến cụ thể, hoặc cả hai, như trong ví dụ này:
byte[] rowvector, colvector, matrix[];
khai này tương đương với:
byte rowvector[], colvector[], matrix[][];
Cá nhân gần như tất cả mã Java mà tôi từng thấy sử dụng biểu mẫu đầu tiên, điều này có ý nghĩa hơn bằng cách giữ tất cả thông tin về biến ở một nơi. Tôi muốn hình thức thứ hai được cho phép, phải trung thực ... nhưng đó là cuộc sống ...
Cũng may là tôi không nghĩ rằng tôi đã từng thấy điều này (có giá trị) Mã:
String[] rectangular[] = new String[10][10];
Cảm ơn, tôi đã gãi đầu về điều này. Kỳ lạ là đủ, khi googling các tiêu đề của câu hỏi tôi tìm thấy không có gì ... – Yoav
+1 Tôi đồng ý về việc không cho phép các hình thức thứ hai. 1 cũng vì tôi không nhận ra bạn có thể kết hợp 'n' match như 'int [] a [];' - đó là * không bao giờ * sẽ không rõ ràng ;-) – Bohemian
khi khai báo một tham chiếu mảng đơn lẻ, không có nhiều khác biệt giữa chúng. vì vậy hai khai báo sau đây giống 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 tôi có thể tìm thấy sự khác biệt giữa chúng. hai câu sau đây có nghĩa là giống nhau. trong thực tế, nó là lập trình viên mà một trong những là theo. nhưng nên sử dụng ký hiệu java chuẩn.
int a[],b[],c[]; // three array references
int[] a,b,c; // three array references
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 xử lý trường hợp thứ hai của bạn là trẻ vị thành niên mã mùi:
Mảng định danh "[]" nên được trên các loại, không biến (mực: S1197)
Trình chỉ định mảng phải luôn được đặt trên loại mã tốt hơn khả năng đọc. Nếu không, nhà phát triển phải xem cả hai loại và tên biến số để biết liệu biến có phải là một mảng hay không.
Noncompliant Mã số Ví dụ
int matrix[][]; // Noncompliant int[] matrix[]; // Noncompliant
Compliant Giải pháp
int[][] matrix; // Compliant
Các [] là một phần của TYPE, không phải của NAME. Đối với tôi, đó là sự khác biệt lớn nhất. –
@Andre - và trong C, [] phần của người kê khai, không phải là trình khai báo khai báo, do đó cú pháp 'int array []'. Cũng logic ... theo một cách nào đó. :) – Kos
C chơi trò chơi nhỏ này :) Và tôi thấy nó quyến rũ :) Ngay cả với ... con trỏ. Cú pháp c 'đúng' cho con trỏ là int * imAPointer. Nó ngớ ngẩn và gọn gàng. – ScarletAmaranth