Java složeni operateri

1. Pregled

U ovom ćemo uputstvu pogledati Java složene operatore, njihove tipove i kako ih Java procjenjuje.

Također ćemo objasniti kako funkcionira implicitno lijevanje.

2. Složeni operateri dodjele

Operator dodjele je binarni operator koji varijabli na lijevoj strani dodjeljuje rezultat desne strane. Najjednostavniji je “=” operator dodjele:

int x = 5;

Ova izjava deklarira novu varijablu x, dodjeljuje x vrijednost 5 i vraća se 5.

Složeni operateri dodjele kraći su način primjene aritmetičke ili bitovne operacije i dodjeljivanja vrijednosti operacije varijabli na lijevoj strani.

Na primjer, sljedeća dva množenja su ekvivalentna, što znači a i b imat će istu vrijednost:

int a = 3, b = 3, c = -2; a = a * c; // Operator jednostavnog dodjeljivanja b * = c; // Složeni operator dodjele

Važno je napomenuti da varijabla s lijeve strane složenog operatora dodjele mora već biti deklarirana. Drugim riječima, složeni operateri ne mogu se koristiti za deklariranje nove varijable.

Poput operatora dodjele “=”, složeni operateri vraćaju dodijeljeni rezultat izraza:

dugo x = 1; dugo y = (x + = 2);

Oba x i g zadržat će vrijednost 3.

Zadatak (x + = 2) radi dvije stvari: prvo, dodaje vrijednost 2 varijabli x, koji postaje 3; drugo, vraća vrijednost zadatka, koja je također 3.

3. Vrste složenih operatora dodjele

Java podržava 11 složenih operatora dodjele. Možemo ih grupirati u aritmetičke i bitovne operatore.

Prođimo kroz aritmetičke operatore i operacije koje oni izvode:

  • Povećanje: +=
  • Dekrementacija: -=
  • Množenje: *=
  • Podjela: /=
  • Modul: %=

Zatim imamo i bitovne operatore:

  • I, binarno: &=
  • Ekskluzivno ILI binarno: ^=
  • Uključuje ILI, binarno: |=
  • Lijevi pomak, binarno: <<=
  • Desni pomak, binarno: >>=
  • Pomak udesno nula ispune: >>>=

Pogledajmo nekoliko primjera ovih operacija:

// Jednostavno dodjeljivanje int x = 5; // x je 5 // Inkrementacija x + = 5; // x je 10 // Dekrementacija x - = 2; // x je 8 // Množenje x * = 2; // x je 16 // Modul x% = 3; // x je 1 // Binarno AND x & = 4; // x je 0 // Binarno ekskluzivno ILI x ^ = 4; // x je 4 // binarno uključujući OR x | = 8; // x je 12

Kao što ovdje možemo vidjeti, sintaksa korištenja ovih operatora je dosljedna.

4. Procjena operacija dodjele složenih spojeva

Java ima dva načina procjene složenih operacija.

Prvi, kada lijevi operand nije niz, tada će Java redom:

  1. Provjerite je li operand deklarirana varijabla
  2. Spremite vrijednost lijevog operanda
  3. Procijenite desni operand
  4. Izvedite binarnu operaciju kako je naznačeno složenim operatorom
  5. Pretvori rezultat binarne operacije u tip lijeve varijable (implicitno lijevanje)
  6. Dodijelite pretvoreni rezultat lijevoj varijabli

Sljedeći, kada je lijevi operand niz, koraci koje treba slijediti malo su različiti:

  1. Provjerite izraz niza s lijeve strane i bacite a NullPointerException ili ArrayIndexOutOfBoundsException ako je netočno
  2. Spremite element niza u indeks
  3. Procijenite desni operand
  4. Provjerite je li odabrana komponenta niza primitivan ili referentni tip, a zatim nastavite s istim koracima kao i prvi popis, kao da je lijevi operand varijabla.

Ako bilo koji korak procjene ne uspije, Java neće nastaviti izvoditi sljedeće korake.

Dajmo nekoliko primjera povezanih s procjenom ovih operacija nad elementom niza:

int [] brojevi = null; // Isprobavanje broja povećanja [2] + = 5;

Kao što bismo i očekivali, ovo će baciti a NullPointerException.

Međutim, ako nizu dodijelimo početnu vrijednost:

int [] brojevi = {0, 1}; // Isprobavanje broja povećanja [2] + = 5;

Riješili bismo se NullPointerException, ali svejedno bismo dobili ArrayIndexOutOfBoundsException, jer indeks koji se koristi nije točan.

Ako to popravimo, operacija će biti uspješno dovršena:

int [] brojevi = {0, 1}; // Brojevi povećanja [1] + = 5; // x je sada 6

Napokon, x varijabla će biti 6 na kraju zadatka.

5. Implicitno lijevanje

Jedan od razloga zašto su složeni operatori korisni je taj što ne samo da pružaju kraći način operacija, već i implicitno emitiraju varijable.

Formalno, složeni izraz dodjeljivanja oblika:

E1 op = E2

ekvivalentno je:

E1 - (T) (E1 op E2)

gdje T je vrsta E1.

Razmotrimo sljedeći primjer:

dugi broj = 10; int i = broj; i = i * broj; // Ne sastavlja se

Razmotrimo zašto se zadnji redak neće sastaviti.

Java automatski promovira manje vrste podataka u veće, kada su zajedno u operaciji, ali izbacit će pogrešku pri pokušaju pretvaranja iz većih u manje tipove.

Dakle, prvo, ja bit će unaprijeđen u dugo a tada će množenje dati rezultat 10L. Dugi rezultat bio bi dodijeljen ja, što je int, a ovo će izbaciti pogrešku.

To se može popraviti eksplicitnom ulogom:

i = (int) i * broj;

Java složeni operateri dodjele su savršeni u ovom slučaju jer rade implicitno lijevanje:

i * = broj;

Ova izjava dobro funkcionira, bacajući rezultat množenja na int i dodjeljivanje vrijednosti lijevoj varijabli, ja.

6. Zaključak

U ovom smo članku pogledali složene operatore u Javi, dajući neke primjere i njihove različite tipove. Objasnili smo kako Java procjenjuje ove operacije.

Konačno, pregledali smo i implicitno lijevanje, jedan od razloga zašto su ovi stenografski operateri korisni.

Kao i uvijek, svi isječci koda spomenuti u ovom članku mogu se naći u našem GitHub spremištu.