Zložené operátory Java

1. Prehľad

V tomto výučbe sa pozrieme na operátory zložených Java, ich typy a na to, ako ich Java vyhodnocuje.

Vysvetlíme tiež, ako funguje implicitné prenášanie.

2. Prevádzkovatelia zložených priradení

Operátor priradenia je binárny operátor, ktorý priraďuje výsledok pravej strany k premennej na ľavej strane. Najjednoduchší je “=” operátor úlohy:

int x = 5;

Toto vyhlásenie deklaruje novú premennú X, priraďuje X hodnota 5 a vráti sa 5.

Zložené operátory priradenia sú kratší spôsob, ako použiť aritmetickú alebo bitovú operáciu a priradiť hodnotu operácie k premennej na ľavej strane.

Napríklad nasledujúce dva príkazy na násobenie sú ekvivalentné, to znamená a a b bude mať rovnakú hodnotu:

int a = 3, b = 3, c = -2; a = a * c; // Jednoduchý operátor priradenia b * = c; // Operátor zloženého priradenia

Je dôležité si uvedomiť, že premenná na ľavej strane operátora zloženého priradenia musí byť už deklarovaná. Inými slovami, zložené operátory nemožno použiť na deklaráciu novej premennej.

Rovnako ako operátor priradenia „=“ vracajú zložené operátory priradený výsledok výrazu:

dlhé x = 1; dlhé y = (x + = 2);

Oboje X a r udrží hodnotu 3.

Úloha (x + = 2) robí dve veci: po prvé, k hodnote premennej pripočíta 2 X, ktorá sa stáva 3; po druhé vráti hodnotu priradenia, ktorá je tiež 3.

3. Typy operátorov priradenia zlúčenín

Java podporuje 11 operátorov zloženého priradenia. Môžeme ich zoskupiť do aritmetických a bitových operátorov.

Poďme si prejsť aritmetickými operátormi a operáciami, ktoré vykonávajú:

  • Prírastok: +=
  • Dekrementácia: -=
  • Násobenie: *=
  • Divízia: /=
  • Modul: %=

Potom máme aj bitové operátory:

  • AND, binárne: &=
  • Exkluzívne OR, binárne: ^=
  • Inkluzívne OR, binárne: |=
  • Ľavý posun, binárny: <<=
  • Pravý posun, binárny: >>=
  • Posunutie nulovej výplne doprava: >>>=

Pozrime sa na niekoľko príkladov týchto operácií:

// Jednoduché priradenie int x = 5; // x je 5 // prírastok x + = 5; // x je 10 // dekrementácia x - = 2; // x je 8 // Násobenie x * = 2; // x je 16 // modul x% = 3; // x je 1 // binárne AND x & = 4; // x je 0 // binárne výlučné ALEBO x ^ = 4; // x je 4 // Binárne vrátane OR x | = 8; // x je 12

Ako vidíme tu, syntax na použitie týchto operátorov je konzistentná.

4. Vyhodnotenie operácií priradenia zlúčenín

Existujú dva spôsoby, ako Java vyhodnocuje zložené operácie.

Najprv, keď operand na ľavej strane nie je pole, potom Java bude v tomto poradí:

  1. Skontrolujte, či je operand deklarovanou premennou
  2. Uložte hodnotu ľavého operandu
  3. Vyhodnoťte pravý operand
  4. Vykonajte binárnu operáciu podľa pokynov zloženého operátora
  5. Konvertujte výsledok binárnej operácie na typ ľavej premennej (implicitné prenášanie)
  6. Priradte prevedený výsledok k ľavej premennej

Ďalšie, keď je operandom na ľavej strane pole, kroky, ktoré treba dodržať, sú trochu odlišné:

  1. Skontrolujte výraz poľa na ľavej strane a hodte a NullPointerException alebo ArrayIndexOutOfBoundsException ak je to nesprávne
  2. Uložte prvok poľa do indexu
  3. Vyhodnoťte pravý operand
  4. Skontrolujte, či je vybraný komponent poľa primitívny alebo referenčný typ, a potom pokračujte rovnakými krokmi ako v prvom zozname, akoby bol operandom na ľavej strane premenná.

Ak niektorý krok vyhodnotenia zlyhá, Java nebude pokračovať v vykonaní nasledujúcich krokov.

Uveďme niekoľko príkladov týkajúcich sa vyhodnotenia týchto operácií prvku poľa:

int [] numbers = null; // Skúšame prírastkové čísla [2] + = 5;

Ako by sme čakali, toto vyvolá a NullPointerException.

Ak však poľa priradíme počiatočnú hodnotu:

int [] čísla = {0, 1}; // Skúšame prírastkové čísla [2] + = 5;

Zbavili by sme sa NullPointerException, ale stále by sme dostali ArrayIndexOutOfBoundsException, pretože použitý index nie je správny.

Ak to napravíme, operácia bude úspešne dokončená:

int [] čísla = {0, 1}; // Prírastkové čísla [1] + = 5; // x má teraz 6

Nakoniec X premenná bude 6 na konci zadania.

5. Implicitné obsadenie

Jedným z dôvodov, prečo sú zložené operátory užitočné, je to, že nielenže poskytujú kratší spôsob operácií, ale aj implicitne prenášajú premenné.

Formálne vyjadrenie zloženého priradenia formulára:

E1 op = E2

je ekvivalentné s:

E1 - (T) (E1 op E2)

kde T je typ E1.

Uvažujme o nasledujúcom príklade:

dlhé číslo = 10; int i = číslo; i = i * číslo; // Neskladá sa

Pozrime sa, prečo sa posledný riadok nezkompiluje.

Java automaticky povýši menšie dátové typy na väčšie dátové typy, keď sú spolu v operácii, ale spôsobí chybu pri pokuse o prevod z väčšieho na menší typ.

Takže najskôr i bude povýšený na dlho a potom násobenie dá výsledok 10L. Dlhý výsledok by bol priradený k i, čo je int, a toto spôsobí chybu.

To by sa dalo opraviť explicitným obsadením:

i = (int) i * číslo;

Operátory priradenia zloženia Java sú v tomto prípade perfektné, pretože implicitne prenášajú:

i * = číslo;

Toto vyhlásenie funguje dobre a výsledok násobenia sa vrhá na int a priradenie hodnoty k ľavej premennej, i.

6. Záver

V tomto článku sme sa pozreli na zložené operátory v Jave, kde uvádzame niekoľko príkladov a ich rôzne typy. Vysvetlili sme, ako Java vyhodnocuje tieto operácie.

Na záver sme skontrolovali aj implicitné prenášanie, jeden z dôvodov, prečo sú títo operátori skratkovníka užitoční.

Všetky fragmenty kódu uvedené v tomto článku nájdete ako vždy v našom úložisku GitHub.


$config[zx-auto] not found$config[zx-overlay] not found