2014-11-01 16 views
5

Tôi có một đoạn mã java dưới đây:Gán nhiều giá trị cho một mảng trong cùng một tuyên bố

int arr[] = new int[5]; 
int index = 0; 
arr[index] = index = 3; 

System.out.println("arr[0] = " + arr[0]); 
System.out.println("arr[3] = " + arr[3]); 

Output là:

arr[0] = 3 
arr[3] = 0 

Chính xác những gì đang xảy ra ở dòng 3?

+0

có thể trùng lặp với [Quy tắc cho thứ tự đánh giá trong Java là gì?] (Http://stackoverflow.com/questions/6800590/what-are-the-rules-for-evaluation-order-in-java) – kraskevich

Trả lời

5

Java đặc điểm kỹ thuật ngôn ngữ:

15,7 Các bảo đảm ngôn ngữ lập trình Java mà các toán hạng của các nhà khai thác có vẻ như được đánh giá theo một thứ tự đánh giá cụ thể, cụ thể là, từ trái sang phải.

Trong trường hợp này, arr[index] được đánh giá trước, tạo tham chiếu đến phần tử bằng không. Điều này là do index vẫn là 0. Bây giờ index = 3 được đánh giá và 3 được lưu trữ trong chỉ mục. Bây giờ nhiệm vụ đầu tiên đã sẵn sàng hoàn thành, do đó, 3 được gán cho phần tử không.

Các nhà thiết kế ngôn ngữ Java khuyên bạn nên tránh dựa vào quy tắc này để làm rõ, đảm bảo rằng chỉ có một hiệu ứng phụ cho một biểu thức. Biểu hiện của bạn, tuy nhiên, có hai tác dụng phụ, một trong số đó phụ thuộc vào sự hoàn thành khác.

Chúng tôi khuyên rằng mã không nên dựa chủ yếu vào đặc điểm kỹ thuật này. Mã thường rõ ràng hơn khi mỗi biểu thức chứa tối đa một hiệu ứng phụ, là hoạt động ngoài cùng của nó và khi mã không phụ thuộc vào chính xác ngoại lệ nào phát sinh do hậu quả của việc đánh giá trái sang phải biểu thức.

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