Operatörens företräde bestämmer i vilken ordning operatörerna i ett uttryck utvärderas.
Innan du börjar läsa den här artikeln bör du ha en grundläggande kunskap om Java-operatörer.
Ta en titt på uttalandet nedan:
int myInt = 12 - 4 * 2;
Vad blir värdet av myInt? Kommer det att vara (12 - 4)*2
, det vill säga 16
? Eller så blir det 12 - (4 * 2)
, det vill säga 4
?
När två operatörer delar en gemensam operand, 4
i detta fall, opereras operatören med högst företräde först.
I Java är företräde *
högre än den för -
. Därför utförs multiplikationen före subtraktion, och värdet på myInt blir 4.
Operatörens prioritetstabell
Tabellen nedan visar företräde för Java i Java; ju högre det visas i tabellen, desto högre är dess företräde.
Java Operator PrecedenceOperatörer | Företräde |
---|---|
ökning och minskning av postfix | ++ -- |
prefix steg och minskning, och unary | ++ -- + - ~ ! |
multiplikativ | * / % |
tillsats | + - |
flytta | << >> >>> |
relationellt | < > <= >= instanceof |
jämlikhet | == != |
bitvis OCH | & |
bitvis exklusivt ELLER | ^ |
bitvis inkluderande ELLER | | |
logisk OCH | && |
logisk ELLER | || |
ternära | ? : |
uppdrag | = += -= *= /= %= &= ^= |= <<= >>= >>>= |
Exempel: Operatörens företräde
class Precedence ( public static void main(String() args) ( int a = 10, b = 5, c = 1, result; result = a-++c-++b; System.out.println(result); ) )
Utgång :
2
Operatörens företräde för prefixet ++
är högre än för -
subtraktionsoperatören. Därmed,
resultat = a - ++ c - ++ b;
är ekvivalent med
resultat = a - (++ c) - (++ b);
När du hanterar flera operatörer och operander i ett enda uttryck kan du använda parenteser som i exemplet ovan för tydlighetens skull. Uttrycket inom parentes utvärderas först.
Associativitet för operatörer i Java
Om ett uttryck har två operatorer med samma företräde utvärderas uttrycket utifrån dess associativitet (antingen från vänster till höger eller från höger till vänster). Låt oss ta ett exempel.
a = b = c;
Här tilldelas värdet på c variabel b. Då tilldelas värdet på b variabel a. Varför? Det beror på att associativiteten för = operator är från höger till vänster.
Tabellen nedan visar associativiteten hos Java-operatörer tillsammans med deras associativitet.
Java Operator Precedence and AssociativityOperatörer | Företräde | Associativitet |
---|---|---|
ökning och minskning av postfix | ++ -- | vänster till höger |
prefix steg och minskning, och unary | ++ -- + - ~ ! | höger till vänster |
multiplikativ | * / % | vänster till höger |
tillsats | + - | vänster till höger |
flytta | << >> >>> | vänster till höger |
relationellt | < > <= >= instanceof | vänster till höger |
jämlikhet | == != | vänster till höger |
bitvis OCH | & | vänster till höger |
bitvis exklusivt ELLER | ^ | vänster till höger |
bitvis inkluderande ELLER | | | vänster till höger |
logisk OCH | && | vänster till höger |
logisk ELLER | || | vänster till höger |
ternära | ? : | höger till vänster |
uppdrag | = += -= *= /= %= &= ^= |= <<= >>= >>>= | höger till vänster |
Du behöver inte memorera allt här. För det mesta är operatörernas företräde och associativitet meningsfullt i sig. Du kan alltid komma tillbaka till den här artikeln för referens när du är osäker. Du kan också använda parentes om du tror att det gör din kod lättare att förstå.