Når vi taler om forrang i Java, kommer operatøren først i tankerne. Der er visse regler defineret i Java for at angive den rækkefølge, som operatorerne i et udtryk evalueres i. Operatør forrang er et koncept til at bestemme gruppen af udtryk i et udtryk. Operatørens forrang er ansvarlig for at evaluere udtrykkene. I Java , parentes() og Array subscript[] har den højeste forrang i Java. For eksempel har addition og subtraktion højere forrang end venstreskift- og højreskiftoperatorerne.
Nedenfor er en tabel defineret, hvor den laveste prioritetsoperator vises øverst i den.
Forrang | Operatør | Type | Associativitet |
---|---|---|---|
1) | = += -= *= /= %= | Opgave Tillægsopgave Subtraktionsopgave Multiplikationsopgave Divisionsopgave Modulopgave | Højre til venstre |
2) | ? : | Ternær betinget | Højre til venstre |
3) | || | Logisk ELLER | Venstre til højre |
4) | && | Logisk OG | Venstre til højre |
5) | | | Bitvis inklusive ELLER | Venstre til højre |
6) | ^ | Bitvis eksklusiv ELLER | Venstre til højre |
7) | & | Bitvis OG | Venstre til højre |
8) | != == | Relationel er ikke lig med Relationel er lig med | Venstre til højre |
9) | < <= > >= forekomst af=> | Relationel mindre end Relationel mindre end eller lig Relationel større end Relationel større end eller lig Typesammenligning (kun objekter) | Venstre til højre |
10) | >> << >>> | Bitvist højreskift med tegnforlængelse Bitvist venstreskift Bitvist højreskift med nul forlængelse | Venstre til højre |
elleve) | - + | Subtraktion Tilføjelse | Venstre til højre |
12) | * / % | Multiplikation Division Modulus | Venstre til højre |
13) | - + ~ ! (type) | Unær minus Unært plus Unært bitvis komplement Unær logisk negation Unær typecast | Højre til venstre |
14) | ++ -- | Unær post-tilvækst Unær post-dekrement | Højre til venstre |
femten) | · () [] | Punktoperator Parenteser Array subscript | Venstre til højre |
Forrangsrækkefølge
Når to operatører deler en enkelt operand, går operatøren med den højeste prioritet først. For eksempel behandles x + y * z som x + (y * z), hvorimod x * y + z behandles som (x * y) + z, fordi * operator har højeste forrang i sammenligning med + operator.
indsæt vandmærke i word
Associativitet
Associativ er et begreb relateret til de operatorer, der anvendes, når to operatorer med samme forrang kommer i et udtryk. Associativitetskonceptet er meget nyttigt at gå fra den situation. Antag, at vi har et udtryk a + b - c (+ og - operatorer har samme prioritet) , og dette udtryk vil blive behandlet som (a + (b - c)) fordi disse operatorer er højre til venstre-associative. På den anden side vil a+++--b+c++ blive behandlet som ((a++)+((--b)+(c++))) fordi de unære post-increment og decrement-operatorer er højre til venstre-associative.
Et eksempel er defineret nedenfor for at forstå, hvordan et udtryk evalueres ved hjælp af forrangsrækkefølge og associativitet?
Udtryk: x = 4 / 2 + 8 * 4 - ( 5+ 2 ) % 3
Løsning:
1) I ovenstående udtryk er den højeste prioritetsoperator () . Så parentesen går først og beregner først.
x = 4/2 + 8 * 4 - 7 % 3
2) Nu, /, * og % operatører har samme forrang og højest fra + og - Her bruger vi associativitetsbegrebet til at løse dem. Tilknytningen af disse operatorer er fra venstre mod højre. Så, / operatør går først og derefter * og % samtidigt.
x = 2 + 8 * 4 - 7 % 3
x = 2 + 32 - 7 % 3
java-strengen er tom
x = 2 + 32 - 1
3) Nu, + og - operatører har begge også den samme forrang, og associativiteten af disse operatører ikke til højre. Så, + operatør vil gå først, og derefter - vil gå.
x = 34 - 1
x = 33
HighestPrecedence.java
//import classes import java.util.*; //creating HighestPrecedence class to evaluate the expression public class HighestPrecedence { //main() method starts public static void main(String[] args) { //initialize variables with default values int x = 2; int y = 5; int z = 12; //calculating exp1, exp2, and exp3 int exp1 = x +(z/x+(z%y)*(z-x)^2); int exp2 = z/x+y*x-(y+x)%z; int exp3 = 4/2+8*4-(5+2)%3; //printing the result System.out.println(exp1); System.out.println(exp2); System.out.println(exp3); } }
Produktion
scanner.next java