• 3.4.1. Precedencia - kiértékelési sorrend
  • 1. java bevezető




    Download 1,08 Mb.
    bet6/51
    Sana07.04.2017
    Hajmi1,08 Mb.
    #3295
    1   2   3   4   5   6   7   8   9   ...   51

    3.4. Kifejezések


    Az operátorok és operandusok halmazát kifejezésnek nevezzük, egy kifejezés mindig egy értéket ad vissza, amelyet általában értékadással átadunk egy változónak, vagy paraméterként adjuk át egy metódusnak. A cikksorozat első részében is használtunk már kifejezéseket, csak nem nevezetük így a leírt sorokat, amelyek egyszerű kifejezések voltak.

    Az összetett kifejezések több operátorból és operandusból állnak, és a megszokott matematikai kiértékelési sorrend szerint kell írnunk a kívánalmainkat:



    view plaincopy to clipboardprint?

    1. int szám = 1 + 2 + 3;  

    2. System.out.println(szám);  

    A kifejezés értéke 6 lesz, ahogy azt várjuk, a kifejezése kiértékelése során a számítógép pont úgy viselkedik, ahogy azt annak idején tanultuk: veszi az első két számot, összeadja őket, majd az eredményt és a harmadik számot újfent összeadja. Ebben az esetben nem számít a kiértékelés sorrendje, hiszen teljesen mindegy, hogy a számokat milyen sorrendben adjuk össze, ettől függetlenül a számítógép mindig balról-jobbra haladva végzi el az egyes műveleteket.

    A kiértékelés sorrendje változhat a műveleti jelek függvényében, hiszen a szorzás előnyt élvez az összeadással szemben:



    view plaincopy to clipboardprint?

    1. int szám = 1 + 2 * 3;  

    2. System.out.println(szám);  

    A számítógép először a szorzás műveletét végzi el, majd a kapott eredményhez hozzáad egyet, így a végső eredmény 7 lesz. Zárójelezéssel ez a kiértékelési sorrend felülbírálható:

    view plaincopy to clipboardprint?

    1. int szám = (1 + 2) * 3;  

    2. System.out.println(szám);  

    Ebben az esetben a számítógép először a zárójelben lévő műveletet végzi el, majd a kapott eredményt megszorozza hárommal, így kapjuk meg az eredményt, ami 9.

    3.4.1. Precedencia - kiértékelési sorrend


    A kiértékelési sorrend függ az operátoroktól, így fontos tudni a pontos kiértékelési sorrendet, amelyet vagy megtanulunk, vagy zárójelezünk bizonytalan helyzetben. Lássuk a sorrendet:

    1. unáris operátorok (a kiértékelés jobbról balra történik!):

      • --szám: a szám értékének előzetes csökkentése

      • ++szám: a szám értékének előzetes növelése

      • szám--: a szám értékének utólagos csökkentése

      • szám++: a szám értékének utólagos növelése

      • - szám: a szám előjelének megváltoztatása

      • ~ szám: a szám bináris tagadása (negáció)

      • ! igazHamis: egy boolean érték tagadása

      • (type): típuskényszerítés

      • new: új példány létrehozása

    2. multiplikatív operátorok:

      • szám * másikSzám: a két szám összeszorzása

      • szám / másikSzám: a szám elosztása egy másikSzámmal

      • szám % másikSzám: maradék képzése (szám osztva másikSzámmal)

    3. additív operátorok:

      • szám + másikSzám: a két szám összeadása

      • szám - másikSzám: számból kivonjuk a másikSzámot

    4. bitléptetés operátorok:

      • szám << másikSzám: a szám változóban lévő bitek léptetése balra másikSzám pozícióval

      • szám >> másikSzám: a szám változóban lévő bitek léptetése jobbra másikSzám pozícióval - az előjel figyelembevételével

      • szám >>> másikSzám: a szám változóban lévő bitek léptetése jobbra másikSzám pozícióval

    5. relációs operátorok:

      • szám < másikSzám: a szám kisebb-e, mint a másikSzám

      • szám <= másikSzám: a szám kisebb vagy egyenlő-e, mint a másikSzám

      • szám > másikSzám: a szám nagyobb-e, mint a másikSzám

      • szám >= másikSzám: a szám nagyobb vagy egyenlő-e, mint a másikSzám

      • instanceof: referencia teszt operátor

    6. egyenlőség operátorok:

      • szám == másikSzám: a két szám egyenlő-e egymással

      • szám != másikSzám: a két szám nem egyenlő-e egymással

    7. bitenkénti ÉS operátor:

      • szám & másikSzám: a szám és a másikSzám között bitenkénti ÉS művelet

      • igazHamis & másikIgazHamis: az igazHamis és a másikIgazHamis közötti ÉS művelet

    8. bitenkénti KIZÁRÓ VAGY operátor:

      • szám ^ másikSzám: a szám és a másikSzám között bitenkénti KIZÁRÓ VAGY művelet

      • igazHamis ^ másikIgazHamis: az igazHamis és a másikIgazHamis közötti KIZÁRÓ VAGY művelet

    9. bitenkénti VAGY operátor:

      • szám | másikSzám: a szám és a másikSzám között bitenkénti VAGY művelet

      • igazHamis | másikIgazHamis: az igazHamis és a másikIgazHamis közötti VAGY művelet

    10. boolean ÉS operátor:

      • igazHamis && másikIgazHamis: az igazHamis és a másikIgazHamis közötti ÉS művelet

    11. boolean VAGY operátor:

      • igazHamis || másikIgazHamis: az igazHamis és a másikIgazHamis közötti VAGY művelet

    12. feltételes értékadás operátor:

      • szám == másikSzám ? szám : másikSzám: feltételes értékadás (lásd fent bővebben)

    13. értékadás operátor:

      • szám = másikSzám: a szám változó értéke felveszi a másikSzám értékét

    14. értékadás művelettel operátorok:

      • szám += másikSzám: a szám változó értéke a szám előző értéke és a másikSzám összege lesz

      • szám -= másikSzám: a szám változó értéke a szám előző értéke és a másikSzám különbsége lesz

      • szám *= másikSzám: a szám változó értéke a szám előző értéke és a másikSzám szorzata lesz

      • szám /= másikSzám: a szám változó értéke a szám előző értéke és a másikSzám hányadosa lesz

      • szám %= másikSzám: a szám változó értéke a szám előző értéke és a másikSzám maradéke lesz

      • szám &= másikSzám: a szám változó értéke a szám előző értéke és a másikSzám változó közötti bitenkénti ÉS eredménye lesz

      • szám ^= másikSzám: a szám változó értéke a szám előző értéke és a másikSzám változó közötti bitenkénti KIZÁRÓ VAGY eredménye lesz

      • szám |= másikSzám: a szám változó értéke a szám előző értéke és a másikSzám változó közötti bitenkénti VAGY eredménye lesz

      • szám <<= másikSzám: a szám változó értéke a szám előző értéke balra léptetve másikSzám pozícióval lesz

      • szám >>= másikSzám: a szám változó értéke a szám előző értéke előjellel jobbra léptetve másikSzám pozícióval lesz

      • szám >>>= másikSzám: a szám változó értéke a szám előző értéke jobbra léptetve másikSzám pozícióval lesz

    A prefix (++szám vagy ++szám) és a postfix (szám++ vagy szám--) operátorok használata mindig kockázatos, mivel a kifejezés kiértékelés során változik a változó értéke, vessünk egy pillantást az alábbi programrészletre és próbáljuk meghatározni az eredményt:

    view plaincopy to clipboardprint?

    1. int szám = 10;  

    2. System.out.println(szám++ + ++szám * ++szám + szám++);  

    Nos, az eredmény 179, mégpedig azért, mert az unáris operátorok az elsők a precedencia táblázatban, és kiértékelésük az elsők között történik, ebből adódóan a kifejezés a következő lesz az unáris operátorok feloldása után:

    view plaincopy to clipboardprint?

    1. System.out.println(10 + 12 * 13 + 13);  

    Ha végigkövetjük az értékadásokat, akkor láthatjuk, hogy az eredmény valóban 179.

    Download 1,08 Mb.
    1   2   3   4   5   6   7   8   9   ...   51




    Download 1,08 Mb.