Mức độ ưu tiên của toán tử xác định thứ tự mà các toán tử trong một biểu thức được đánh giá.
Trước khi bắt đầu đọc bài viết này, bạn nên có kiến thức cơ bản về Toán tử Java.
Bây giờ, hãy xem tuyên bố dưới đây:
int myInt = 12 - 4 * 2;
Giá trị của myInt sẽ là gì? Nó sẽ được (12 - 4)*2
, đó là 16
,? Hoặc nó sẽ là 12 - (4 * 2)
, đó là 4
,?
Khi hai toán tử chia sẻ một toán hạng chung, 4
trong trường hợp này, toán tử có mức ưu tiên cao nhất được tính toán trước.
Trong Java, mức độ ưu tiên của *
cao hơn mức độ ưu tiên của -
. Do đó, phép nhân được thực hiện trước phép trừ và giá trị của myInt sẽ là 4.
Bảng ưu tiên nhà điều hành
Bảng dưới đây liệt kê mức độ ưu tiên của các toán tử trong Java; nó xuất hiện trong bảng càng cao thì mức độ ưu tiên của nó càng cao.
Ưu tiên toán tử JavaNgười điều hành | Quyền ưu tiên |
---|---|
tăng và giảm postfix | ++ -- |
tiền tố tăng và giảm, và một | ++ -- + - ~ ! |
nhân | * / % |
phụ gia | + - |
sự thay đổi | << >> >>> |
quan hệ | < > <= >= instanceof |
bình đẳng | == != |
bitwise VÀ | & |
bitwise độc quyền HOẶC | ^ |
bao gồm bitwise HOẶC | | |
logic AND | && |
logic HOẶC | || |
bậc ba | ? : |
sự phân công | = += -= *= /= %= &= ^= |= <<= >>= >>>= |
Ví dụ: Quyền ưu tiên của nhà điều hành
class Precedence ( public static void main(String() args) ( int a = 10, b = 5, c = 1, result; result = a-++c-++b; System.out.println(result); ) )
Đầu ra :
2
Toán tử ưu tiên tiền tố ++
cao hơn -
toán tử trừ. Vì thế,
kết quả = a - ++ c - ++ b;
tương đương với
kết quả = a - (++ c) - (++ b);
Khi xử lý nhiều toán tử và toán hạng trong một biểu thức, bạn có thể sử dụng dấu ngoặc đơn như trong ví dụ trên cho rõ ràng. Biểu thức bên trong dấu ngoặc đơn được đánh giá đầu tiên.
Tính liên kết của các toán tử trong Java
Nếu một biểu thức có hai toán tử có mức độ ưu tiên tương tự, biểu thức được đánh giá theo tính kết hợp của nó (từ trái sang phải hoặc từ phải sang trái). Hãy lấy một ví dụ.
a = b = c;
Ở đây, giá trị của c được gán cho biến b. Khi đó giá trị của b được gán cho biến a. Tại sao? Đó là vì tính liên kết của toán tử = từ phải sang trái.
Bảng dưới đây cho thấy tính liên kết của các toán tử Java cùng với tính liên kết của chúng.
Tính ưu tiên và tính liên kết của toán tử JavaNgười điều hành | Quyền ưu tiên | Sự liên kết |
---|---|---|
tăng và giảm postfix | ++ -- | trái sang phải |
tiền tố tăng và giảm, và một | ++ -- + - ~ ! | phải sang trái |
nhân | * / % | trái sang phải |
phụ gia | + - | trái sang phải |
sự thay đổi | << >> >>> | trái sang phải |
quan hệ | < > <= >= instanceof | trái sang phải |
bình đẳng | == != | trái sang phải |
bitwise VÀ | & | trái sang phải |
bitwise độc quyền HOẶC | ^ | trái sang phải |
bao gồm bitwise HOẶC | | | trái sang phải |
logic AND | && | trái sang phải |
logic HOẶC | || | trái sang phải |
bậc ba | ? : | phải sang trái |
sự phân công | = += -= *= /= %= &= ^= |= <<= >>= >>>= | phải sang trái |
Bạn không cần phải ghi nhớ mọi thứ ở đây. Hầu hết thời gian, mức độ ưu tiên và tính liên kết của các toán tử tự nó có ý nghĩa. Bạn luôn có thể quay lại bài viết này để tham khảo khi nghi ngờ. Ngoài ra, bạn có thể sử dụng dấu ngoặc đơn nếu bạn cho rằng nó làm cho mã của bạn dễ hiểu hơn.