2009-07-18 38 views
10

xem xét mã này:Tại sao mảng Java này được coi là hai chiều?

class arraytest { 

    public static void main(String args[]) { 

     int[] a = null , b[] = null; 

     b = a; 
     System.out.println(b); 

    } 

} 

Dòng

b = a; 

được đánh dấu bởi trình biên dịch nói:

Incompatible types, found int[], required int [][] 

Tại sao b coi hai chiều? Tôi nhận ra các "shortcut" khai

int[] a = null , b[] = null;

là để đổ lỗi, nhưng tại sao nó làm mảng hai chiều khi chỉ có một bộ khung đã được viết? Tôi thấy cú pháp này không rõ ràng và làm xáo trộn.

Trả lời

19

Hãy ví dụ này:

int a, b; 

Sau đó, cả a và b là ints, phải không? Vì vậy, bây giờ thực hiện điều này:

int[] a, b; 

Cả hai a và b là mảng int. Vì vậy, bằng cách thêm một bộ khung:

int[] a, b[]; 

bạn thêm một bộ khung để b.

Một trong những sẽ là tốt:

int[] a = null , b = null; 
int a[] = null , b[] = null; 

hoặc như bạn nói, chỉ cần đặt chúng trên dòng riêng biệt sẽ làm việc quá (và dễ dàng hơn nhiều để đọc).

+0

+1, Với int a [] = null, b [] = null; sẽ biên dịch tốt – akarnokd

5
int[] a = null , b[] =null; 


.... nó bằng:

int[] a = null; 
int[][]b = null; 

Bạn phải làm:

int[] a = null , b =null; 
3

Bên cạnh những câu trả lời khác, Java không có đa mảng chiều. Java có mảng bất kỳ kiểu nào. "Bất kỳ loại nào" này có thể là một mảng. Mảng đa chiều khác biệt rõ ràng, mặc dù tinh tế.

2

Nếu bạn đưa ra các tuyên bố a, đây là những gì bạn có:

int[] b[] = null; 

đó là, không may, một sự thay thế hợp pháp để

int[][] b = null; 
1

Tôi đã dẫn đến tin rằng cú pháp của cho phép các [] sau khi b đã có duy nhất cho đám đông C-ngôn ngữ, những người sẽ cảm thấy nhiều hơn ở nhà với nó.Thật không may, nó có tác dụng phụ của việc cho phép khai báo nhầm lẫn như

int[] b[]; 

mà kết thúc giống như

int[][] b; 
Các vấn đề liên quan