2012-05-27 41 views
19

tôi tự hỏi,Initialize mảng của nguyên thủy

là gì chính xác sự khác biệt giữa hai cách khởi tạo một mảng của nguyên thủy:

int[] arr1 = new int[]{3,2,5,4,1}; 

int[] arr2 = {3,2,5,4,1}; 

và cái nào được ưa chuộng?

+8

Không có sự khác biệt. Đừng quan tâm đến những chi tiết nhỏ bé như vậy và tập trung vào bức tranh lớn hơn! –

+2

Thứ hai; điểm đầu tiên là gì? –

Trả lời

14

Không có, chúng sản xuất chính xác cùng một bytecode. Tôi nghĩ rằng nó có thể là hình thức thứ hai không được hỗ trợ trong các phiên bản Java cũ hơn, nhưng điều đó có thể đã được một thời gian trở lại.

Đó là trường hợp, nó trở thành vấn đề về phong cách, đó là vấn đề sở thích cá nhân. Vì bạn được yêu cầu cụ thể, I thích thứ hai, nhưng một lần nữa, đó là vấn đề về sở thích cá nhân.

+0

Trong phiên bản java cũ hơn, mới .. được yêu cầu cho các kiểu nguyên thủy nếu im correcT? –

+0

@JimmyGeers: Đó là những gì tôi đã nói. :-) –

+0

Tính năng này được thêm vào phiên bản nào? – reesjones

6

Không có sự khác biệt giữa hai câu lệnh. Nói cá nhân, câu hỏi thứ hai được ưu tiên. Bởi vì bạn có tất cả các yếu tố được chỉ định trong niềng răng. Trình biên dịch sẽ giúp bạn tính toán kích thước của mảng.

Vì vậy, không cần phải thêm int[] sau toán tử gán.

1

Trong trường hợp này, điều thứ hai vì nó đẹp hơn và ít tiết :)

+0

+1, ngắn và ngọt –

7

Như những người khác đã đề cập, họ là tương đương và lựa chọn thứ hai là ít tiết. Thật không may là trình biên dịch không phải lúc nào cũng có thể hiểu được lựa chọn thứ hai:

public int[] getNumbers() { 
    return {1, 2, 3}; //illegal start of expression 
} 

Trong trường hợp này bạn cần phải sử dụng toàn bộ cú pháp:

public int[] getNumbers() { 
    return new int[]{1, 2, 3}; 
} 
1

hữu ích trong tình huống này

void foo(int[] array) { 

} 

gọi với một chữ số

// works 
foo(new int[]{5, 7}) 

//illegal 
foo({5, 7}) 
2

Trong trường hợp của bạn, hai kiểu này kết thúc cùng một hiệu ứng, cả hai đều đúng, với kiểu thứ hai ngắn gọn hơn. Nhưng thực tế hai phong cách này lại khác nhau.

Hãy nhớ mảng trong java là cấu trúc dữ liệu độ dài cố định. Khi bạn tạo một mảng, bạn phải chỉ định độ dài.

Nếu không khởi tạo, trường hợp đầu tiên là

int[] arr1 = new int[5]; 

Trường hợp thứ hai nó sẽ là

int[] arr2 = {0,0,0,0,0}; 

Bạn thấy sự khác biệt? Trong trường hợp này, kiểu đầu tiên được ưa thích vì bạn không phải nhập tất cả các giá trị mặc định ban đầu theo cách thủ công.

Với tôi, sự khác biệt lớn duy nhất giữa hai kiểu là khi tạo mảng không khởi tạo rõ ràng.

Các vấn đề liên quan