Programovanie

Vyhodnoťte výrazy Java s operátormi

Aplikácie Java spracovávajú údaje vyhodnotením výrazy, čo sú kombinácie literálov, volaní metód, názvov premenných a operátorov. Vyhodnotením výrazu sa zvyčajne vytvorí nová hodnota, ktorú je možné uložiť do premennej, použiť na rozhodnutie atď.

V tomto výučbe sa dozviete, ako písať výrazy pre vaše programy Java. V mnohých prípadoch budete na písanie svojich výrazov Java používať operátory a je ich veľa typy operátorov vedieť používať. Stručne predstavím typy operátorov Java (vrátane typov aditívnych, bitových, logických, podmienených, posuvných a rovných) a ich operandy. Dozviete sa tiež dôležité pojmy, ako je preťaženie operátora a prednosť operátora, a uvidíte ukážku konverzie primitívneho typu. Na záver zakončím malým programom Java, ktorý môžete použiť na samostatné precvičovanie konverzií primitívneho typu.

stiahnuť Získajte kód Stiahnite si zdrojový kód napríklad pre aplikácie v tejto príručke. Vytvoril Jeff Friesen pre JavaWorld.

Jednoduché výrazy

A jednoduchý výraz je doslovný názov premennej alebo volanie metódy. Nie sú zapojení nijakí operátori. Tu je niekoľko príkladov jednoduchých výrazov:

52 // celé číslo doslovného veku // názov premennej System.out.println ("ABC"); // volanie metódy „Java“ // textový reťazec 98.6D // literálny kód s dvojitou presnosťou s pohyblivou rádovou čiarkou 89L // dlhý celočíselný literál

Jednoduchý výraz má a typu, čo je buď primitívny typ, alebo referenčný typ. V týchto príkladoch 52 je 32-bitové celé číslo (int); System.out.println ("ABC"); je neplatné (neplatný) pretože nevracia žiadnu hodnotu;„Java“ je reťazec (String); 98,6D je 64-bitová hodnota s pohyblivou rádovou čiarkou s dvojitou presnosťou (dvojitý); a 89L je 64-bitové celé číslo (dlho). Nevieme Vektypu.

Experimentuje s jshell

Tieto a ďalšie jednoduché výrazy môžete ľahko vyskúšať pomocou jshell. Napríklad zadajte 52 na jshell> výzva a dostanete niečo ako nasledujúci výstup:

$1 ==> 52

$1 je názov a variabilný scratch že jshell vytvára na ukladanie 52. (Premenné typu Scratch sa vytvárajú vždy, keď sa zadávajú literály.) Vykonať System.out.println ($ 1) a uvidíš 52 ako výstup.

Môžeš utekať jshell s -v argument príkazového riadku (jshell -v) na generovanie podrobnej spätnej väzby. V tomto prípade zadanie 52 bude mať za následok nasledujúcu správu odhaľujúcu uvedenú premennú scratch $1int (32-bitové celé číslo) typ:

| vytvorená stieracia premenná $ 1: int

Ďalej skúste zadať Vek. V takom prípade pravdepodobne dostanete chybové hlásenie, že symbol sa nenašiel. Java Shell to predpokladá Vek je premenná, ale nevie jej typ. Museli by ste zahrnúť typ; napríklad uvidíte, čo sa stane, ak zadáte int vek.

Zložené výrazy

A zložený výraz sa skladá z jedného alebo viacerých jednoduchých výrazov integrovaných do väčšieho výrazu pomocou operátor, čo je postupnosť pokynov symbolicky znázornených v zdrojovom kóde. Operátor transformuje svoj výraz operand (y) do inej hodnoty. Napríklad v 6 * 5, operátor násobenia (*) transformuje operandy 6 a 5 do 30.

Zložené výrazy je možné kombinovať do väčších výrazov. Napríklad, 6 * 5 + 10 predstavuje zložený výraz 6 * 5 a zložený výraz pozostávajúci z ich produktu, operátora pridania +a číslo 10. Poradie vyhodnotenia (najskôr vynásobte a potom pridajte) je diktované Java pravidlo priority, ku ktorej sa čoskoro dostaneme.

Zložené výrazy môžu byť tiež jednoduché

6 * 5 je zložený výraz zložený z dvoch jednoduchých výrazov, 6 a 5. ale 6 * 5 je tiež jednoduchý výraz z +perspektíva. The + operátor vidí iba ich produkt, 30, čo je jednoduchý výraz.

Operátori a operandi

Operátory Java sú klasifikované podľa počtu operandov:

  • A unárny operátor má napríklad jedného operanda unárne mínus (napr. -5).
  • A binárny operátor má dva operandy, príkladom je násobenie a sčítanie.
  • A ternárny operátor má troch operandov; príkladom je podmienený operátor (?:).

Operátori Java sú tiež klasifikovaní podľa polohy:

  • A operátor prefixu je unárny operátor, ktorý predchádza svojmu operandu (napr. -5).
  • A operátor postfixu je unárny operátor, ktorý nasleduje za svojim operandom (napr. vek ++; - pridať 1 do Vekčíselná hodnota).
  • An operátor infix je binárny alebo ternárny operátor medzi operandmi operátora (napr. vek + 5 rokov).

Ďalším príkladom jshell

V ďalších častiach predstavím ďalších operátorov, kde uvádzam príklady vo forme aplikácií. Môžete si tiež vyskúšať týchto operátorov s jshell, ako:

jshell> 6 + 2 $ 1 ==> 8 jshell> 7 * $ 1 $ 2 ==> 56

V takom prípade najskôr zadáme výraz 6 + 2, ktoré jshell vyhodnotí a výslednú 8 priraďuje k scratch premennej $1. Ďalej sa množíme $1 od 7, ktorá ukladá 56 premenných do nuly $2. Tento príklad ukazuje, že vo výrazoch Java môžete používať pomocné premenné.

Preťažení operátori

Plus (+) je príklad operátora preťažený operátor, ktorý je operátorom, ktorý vykonáva jednu z niekoľkých operácií na základe typy jeho operandov. Operátor plus vykoná sčítanie celých čísel, keď sú oba operandy celé čísla, sčítanie s pohyblivou rádovou čiarkou, keď sú obidva operandy hodnotami s pohyblivou desatinnou čiarkou, a zreťazenie reťazcov, keď sú oba operandy reťazce. Operátor mínus (-) je tiež preťažený a vykonáva odčítanie celého alebo pohyblivej rádovej čiarky.

Typy operátorov v prostredí Java

Aditívne operátory

The aditívne operátory zvýšenie alebo zníženie číselnej hodnoty sčítaním a odčítaním. Medzi aditívne operátory patrí dodatok (+), odčítanie (-), následný odvod (--), prírastok (++), predchodok (--), a predkrm (++). Zreťazenie reťazca (+) sa tiež považuje za prísadu. Tu je formálna definícia pre každého z týchto operátorov:

  • Dodatok: Dané operand1 + operand2, kde každý operand musí byť znakového alebo číselného typu, doplňte operand2 do operand1 a vrátiť sumu. Príklad: 4 + 6.
  • Odčítanie: Dané operand1 - operand2, kde každý operand musí byť znakového alebo číselného typu, odčítať operand2 od operand1 a vrátiť rozdiel. Príklad: 4 - 6.
  • Postdecrement: Dané premenná--, kde premenná musí byť znakového alebo číselného typu, odčítať od 1 premennáhodnota (uloženie výsledku do premenná) a vráti pôvodnú hodnotu. Príklad: X--;.
  • Prírastok: Dané premenná++, kde premenná musí byť znakového alebo číselného typu, pridať 1 k premennáhodnota (uloženie výsledku do premenná) a vráti pôvodnú hodnotu. Príklad: x ++;.
  • Rozchod: Dané --premenná, kde premenná musí byť znakového alebo číselného typu, od jeho hodnoty odpočítať 1, výsledok uložiť premennáa vráti novú zníženú hodnotu. Príklad: --X;.
  • Predbežnosť: Dané ++premenná, kde premenná musí byť znakového alebo číselného typu, k jeho hodnote pridať 1, výsledok uložiť do premennáa vráti novú zvýšenú hodnotu. Príklad: ++ x;.
  • Zreťazenie reťazca: Dané operand1 + operand2, kde je najmenej jeden operand z String typ, pridať operand2reťazcové zastúpenie do operand1reťazcové zastúpenie a vráti výsledok. Príklad: „A“ + „B“.

Operátory sčítania, odčítania, odčítania, odčítania, odčítania, predčítania a predčítania môžu generovať hodnoty, ktoré prekračujú limity typu výsledku. Napríklad pridaním dvoch veľkých kladných 64-bitových celočíselných hodnôt môže vzniknúť hodnota, ktorú nemožno reprezentovať v 64 bitoch. Výsledné pretečenie nie je detekované ani hlásené aditívnymi operátormi Javy.

Detekcia pretečenia v knižnici štandardných tried Java

Knižnica štandardnej triedy Matematika trieda obsahuje metódy na zisťovanie pretečenia. Napríklad, int addExact (int x, int y) pridá hodnoty v X a r, vrátenie sumy alebo vyvolanie výnimky pri pretečení.

Príklad aplikácie: Aditívne operátory

Zoznam 1 predstavuje malú aplikáciu na hranie s doplnkovými operátormi Java.

Zoznam 1. Aditívne operátory v Jave (AddOp.java)

trieda AddOp {public static void main (String [] args) {System.out.println (125 + 463); System.out.println (2,0 - 6,3); int vek = 65; System.out.println (vek); System.out.println (vek--); System.out.println (vek ++); System.out.println (- vek); System.out.println (++ vek); System.out.println ("A" + "B"); }}

V predchádzajúcom tutoriáli ste sa naučili, ako používať JDK javac nástroj na kompiláciu zdrojového kódu Java a java nástroj na spustenie výslednej aplikácie. Vykonajte nasledujúci príkaz na zostavenie záznamu č. 1:

javac AddOp.java

Za predpokladu úspešnej kompilácie by ste mali dodržiavať AddOp.class súbor v aktuálnom adresári. Vykonajte nasledujúci príkaz na jeho spustenie:

java AddOp

AddOp reaguje produkciou nasledujúceho výstupu:

588 -4,3 65 65 64 64 65 AB

Štúdium tohto výstupu ponúka pohľad na operátory postincrement, postdecrement, preincrement a predecrement. Pre dodatočný prírastok VekAktuálna hodnota je vydaná pred operáciou prírastku / zníženia. Pre zvýšenie / zvýšenie sa operácia vykoná a jej výsledok sa uloží do Vek, a potom Vekvydáva sa nová hodnota.

Iterácia s operátormi Java

Operátory aditív sú obzvlášť užitočné v kontexte iteračný výpis, kde sa používajú na prechod do ďalšej iterácie. O príkazoch iterácie sa dozviete v nasledujúcom návode Java 101.

Operátor indexu poľa

The operátor indexu poľa ([]) pristupuje k prvku poľa zadaním prvku index (poloha). Tento operátor je umiestnený za názvom premennej poľa, ako v známky [0] (prístup k prvému prvku v poli priradenému k ročníky; prvý prvok je uložený v indexe 0). Tu je formálna definícia:

Dané premenná[index], kde index musí byť celé číslo (int) napíšete, načítate hodnotu z alebo do nej uložíte hodnotu premennáúložný prvok na mieste index. Príklad: teploty [1]

Hodnota odovzdaná do index je 32-bitové celé číslo, ktoré má buď 0, alebo kladnú hodnotu v rozmedzí od jednej menej ako je dĺžka poľa, čo je označené pripojením .dĺžka na názov poľa. Napríklad, stupne.dĺžka vráti počet prvkov v poli priradených k ročníky.

Premenné poľa vs polia

ročníky nie je pole, ale je premenná obsahujúca odkaz na oblasť pamäte, ktorá tvorí pole. Platí to pre všetky polia Java. Je však bežné sa o tom zmieniť ročníky alebo ľubovoľná premenná poľa ako pole.

Príklad aplikácie: Operátor indexu poľa

Výpis 2 predstavuje zdrojový kód príkladnej aplikácie, ktorá vám umožní hrať sa s operátorom indexu poľa.

Zoznam 2. Operátor indexu poľa v Jave (ArrayIndexOp.java)

trieda ArrayIndexOp {public static void main (String [] args) {int [] grades = {89, 90, 68, 73, 79}; System.out.println (triedy [1]); známky [1] = 91; System.out.println (triedy [1]); int index = 4; System.out.println (známky [index]); System.out.println (triedy ['C' - 'A']); // System.out.println (známky [1D]); }}

Výpis 2 je o niečo zaujímavejší ako Výpis 1. Po vytvorení päťprvkového, jednorozmerného poľa celých čísel (pomocou inicializátora poľa) a priradení odkazu na pole k ročníky, hlavný() postupuje k prístupu k rôznym prvkom. Špeciálne zaujímavé sú dve položky:

  • Index operátora indexu poľa musí byť nakoniec 32-bitové celé číslo (0 alebo kladná hodnota). Môžete určiť názov celočíselnej premennej (napr. index), ktorý obsahuje hodnotu indexu ako index.
  • Môžete určiť výpočet zahŕňajúci znakové literály. (Ďalej v tomto tutoriále predstavím prevody typov a zistíte prečo „C“ - „A“ vytvorí celé číslo (2), ktoré slúži ako platný index.)

Posledný príklad, ktorý prejde 1D ako index operátora indexu poľa je komentovaný, pretože sa nebude kompilovať. Ak odkomentujete riadok a pokúsite sa zostaviť záznam 2, zobrazí sa chybové hlásenie o nekompatibilných typoch: „možná stratová konverzia z dvojitý do int.."

Zostaviť zoznam 2 (javac ArrayIndexOp.java) a spustite aplikáciu (java ArrayIndexOp). Mali by ste dodržiavať nasledujúci výstup:

90 91 79 68

Operátor indexu poľa a viacrozmerné polia

Tento operátor môžete použiť s viacrozmernými poľami. Napríklad za predpokladu dvojrozmernosti náklady pole, náklady [0] [1] pristupuje k prvku priradenému k prvému riadku (cez [0]) a druhý stĺpec (cez [1]).

Prevádzkovatelia pridelenia

The operátor pridelenia (=) priraďuje hodnotu výrazu k premennej (napr. i = 6;), vrátane prvku poľa (napr. x [0] = 15;). Výraz a premenná musia byť kompatibilné so zadaním, čo znamená, že ich typy musia súhlasiť. Napríklad nemôžete priradiť reťazcový literál k celočíselnej premennej. Viac o tom vysvetlím, keď diskutujeme o typových prevodoch.

Zložené operátory priradenia (+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, >>>=) vyhodnocujte výrazy a priraďte výsledky k premenným v jednom kroku. Každý výraz a premenná musia byť kompatibilné s priradením. Každý operátor slúži ako užitočná skratka. Napríklad namiesto určenia x = x + 3;, môžete určiť kratší a ekvivalentný údaj x + = 3;.

Nech je to krátke!

Namiesto konkretizácie x = x + 1; alebo x = x - 1;, môžete uviesť kratšie x + = 1; alebo x - = 1;. Mohli by ste ušetriť ešte viac klávesové skratky zadaním kratšieho x ++; alebo X--;.

Bitové operátory

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