Đây là một câu hỏi lý thuyết để hiểu đánh giá của Java về các phép tính số học. Vì +
và -
có cùng mức độ ưu tiên, tôi không hoàn toàn hiểu cách Java đánh giá các biểu thức sau (trong đó có nhiều hơn một toán tử +
và -
giữa hai toán hạng).Ưu tiên Java cho nhiều + và - toán tử
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a+-b); // results in -1
System.out.println(a-+b); // results in -1
System.out.println(a+-+b); // results in -1
System.out.println(a-+-b); // results in 3
System.out.println(a-+-+b); // results in 3
System.out.println(a+-+-b); // results in 3
System.out.println(a-+-+-b); // results in -1
System.out.println(a+-+-+b); // results in 3
}
Từ Java 8 Language Specification (§15.8.2):
Toán tử + nhị phân thực hiện Ngoài ra khi áp dụng cho hai toán hạng kiểu số, sản xuất tổng các toán hạng.
Toán tử nhị phân thực hiện phép trừ, tạo ra sự khác biệt của hai toán hạng số.
[...]
Bổ sung là một hoạt động giao hoán nếu biểu thức toán hạng không có tác dụng phụ.
Bổ sung số nguyên là kết hợp khi các toán hạng là tất cả cùng loại.
Điều tôi cũng nhận thấy, là mỗi khi # người hoạt động thậm chí là, kết quả là như nhau và thứ tự không quan trọng. Nhưng khi # người hoạt động là lẻ, điều này không nhất thiết ảnh hưởng đến kết quả. Ví dụ. trong hai biểu thức sau có thêm một số -
hơn +
, tuy nhiên kết quả lại khác.
System.out.println(a-+-b); // results in 3
System.out.println(a-+-+-b); // results in -1
Với tất cả thông tin đó tôi vẫn không thấy mẫu hoặc cách thức hoạt động của tính năng này.
i tin * a + -b * được thực hiện dưới dạng * a + (-b) *. kiểm tra nó ra –
@Sanket Makani '--' và' ++ 'không được phép trong trường hợp đó bởi vì Java coi đó là hoạt động tăng/giảm – ncw