Operatørens forrang bestemmer rækkefølgen, i hvilken operatørerne i et udtryk vurderes.
Før du begynder at læse denne artikel, skal du have en grundlæggende viden om Java-operatører.
Se nu på udsagnet nedenfor:
int myInt = 12 - 4 * 2;
Hvad vil værdien af myInt være? Vil det være (12 - 4)*2
, altså 16
? Eller det vil være 12 - (4 * 2)
, det vil sige 4
?
Når to operatører deler en fælles operand, 4
i dette tilfælde betjenes operatøren med den højeste prioritet først.
I Java er forrang for *
højere end for -
. Derfor udføres multiplikationen før subtraktion, og værdien af myInt vil være 4.
Operatørens prioritetstabel
Tabellen nedenfor viser forrang for operatører i Java; jo højere den vises i tabellen, jo højere er dens forrang.
Java-operatørpræferenceOperatører | Forrang |
---|---|
stigning og reduktion af postfix | ++ -- |
præfiks stigning og nedgang, og unary | ++ -- + - ~ ! |
multiplikativ | * / % |
tilsætningsstof | + - |
flytte | << >> >>> |
relationel | < > <= >= instanceof |
lighed | == != |
bitvis OG | & |
bitvis eksklusiv ELLER | ^ |
bitvis inklusive ELLER | | |
logisk OG | && |
logisk ELLER | || |
ternær | ? : |
opgave | = += -= *= /= %= &= ^= |= <<= >>= >>>= |
Eksempel: Operatørpræference
class Precedence ( public static void main(String() args) ( int a = 10, b = 5, c = 1, result; result = a-++c-++b; System.out.println(result); ) )
Output :
2
Operatorens forrang for præfikset ++
er højere end for -
subtraktionsoperatøren. Derfor
resultat = a - ++ c - ++ b;
svarer til
resultat = a - (++ c) - (++ b);
Når du beskæftiger dig med flere operatorer og operander i et enkelt udtryk, kan du bruge parenteser som i ovenstående eksempel for at få klarhed. Udtrykket inden for parenteserne evalueres først.
Associativitet af operatører i Java
Hvis et udtryk har to operatorer med samme forrang, evalueres udtrykket i henhold til dets associativitet (enten fra venstre mod højre eller fra højre mod venstre). Lad os tage et eksempel.
a = b = c;
Her tildeles værdien af c variabel b. Derefter tildeles værdien af b til variabel a. Hvorfor? Det er fordi associativiteten af = operator er fra højre mod venstre.
Nedenstående tabel viser Java-operatørernes associativitet sammen med deres associativitet.
Java Operator Precedence and AssociativityOperatører | Forrang | Associativitet |
---|---|---|
stigning og reduktion af postfix | ++ -- | venstre til højre |
præfiks stigning og nedgang, og unary | ++ -- + - ~ ! | højre mod venstre |
multiplikativ | * / % | venstre til højre |
tilsætningsstof | + - | venstre til højre |
flytte | << >> >>> | venstre til højre |
relationel | < > <= >= instanceof | venstre til højre |
lighed | == != | venstre til højre |
bitvis OG | & | venstre til højre |
bitvis eksklusiv ELLER | ^ | venstre til højre |
bitvis inklusive ELLER | | | venstre til højre |
logisk OG | && | venstre til højre |
logisk ELLER | || | venstre til højre |
ternær | ? : | højre mod venstre |
opgave | = += -= *= /= %= &= ^= |= <<= >>= >>>= | højre mod venstre |
Du behøver ikke at huske alt her. For det meste giver operatørernes forrang og associativitet mening i sig selv. Du kan altid vende tilbage til denne artikel til reference, når du er i tvivl. Du kan også bruge parentes, hvis du synes, det gør din kode lettere at forstå.