2016-08-25 17 views
6

Tôi chỉ đi qua một đoạn mã tôi thấy thú vị (vì tôi chưa bao giờ thấy nó như là một câu hỏi trước khi trong 2 năm của chương trình)Java thứ tự ưu tiên

int x = 5; 
int y = 3; 
int z = y + (y+=1) % 4 + (x-=2)/3; 
System.out.println(z); 

Đầu ra là 4.

Tôi tự hỏi tại sao 'y' bên trái được đánh giá đầu tiên thay vì '(y + = 1)' mà sau đó sẽ dẫn đến kết quả là 5 (nói cách khác, tại sao khung không buộc thứ tự ưu tiên?)

Tôi không chắc chắn nên tìm kiếm gì từ khi tìm kiếm 'thứ tự ưu tiên java' trả về kết quả tha t lúc tốt nhất cho thấy các ví dụ phức tạp của y ++, ++ y loại câu hỏi hoặc chỉ thứ tự bảng ưu tiên.

Tôi đã gắn thẻ Java nhưng tôi đã thử nghiệm điều này bằng C# và javascript để nó có lẽ là một điều chung trong lập trình.

Cập nhật

Tôi đã nhầm lẫn về thứ tự ưu tiên và thứ tự đánh giá.

Điều này article đã giúp tôi hiểu thêm về các câu trả lời được cung cấp.

+3

Điều kỳ lạ về việc đánh giá cụm từ ngoài cùng bên trái trước tiên? –

+4

Bạn sẽ không thấy đó là một câu hỏi bởi vì bất kỳ lập trình viên nào đáng giá muối của anh ấy cũng sẽ không viết một cái gì đó như thế. Những loại câu hỏi này khá vô giá trị. – Kayaman

+1

@JFMeier Tôi muốn biết tại sao khung '(y + = 1)' không được thực hiện trước. – Stein121

Trả lời

11

Tóm lại, dấu ngoặc đơn chỉ áp dụng cho cụm từ cụ thể.

Khái niệm y + (y+=1) % 4 + (x-=2)/3; có thể được viết lại như t1 + t2 + t3, với t1 đứng cho y, t2 cho (y+=1) % 4t3 cho (x-=2)/3.

Java luôn đánh giá này từ trái sang phải, từ associativity của toán tử nhị phân + là từ trái sang phải. Do đó, t1 là cụm từ đầu tiên được đánh giá và do đó được thực hiện như vậy với giá trị không được tăng thêm của y.

+1

Đây là chìa khóa - đánh giá luôn là LTR. Tôi tin vào C++ thứ tự đánh giá là _undefined _... –

+0

Thật vậy, việc đánh giá '+' là từ LTR: Tôi đã thêm vào đó. Lưu ý rằng các điều kiện bậc ba, ví dụ, được đánh giá từ RTL. – Bathsheba

+1

Đây là thứ tự ngôn ngữ phương Tây nhất được đọc từ trái sang phải. Tiếng Ả Rập, tiếng Do Thái được đọc từ phải sang trái bằng cách so sánh. –

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