Programování

Vyhodnoťte výrazy Java s operátory

Aplikace Java zpracovávají data vyhodnocením výrazy, což jsou kombinace literálů, volání metod, názvů proměnných a operátorů. Vyhodnocení výrazu obvykle vytvoří novou hodnotu, kterou lze uložit do proměnné, použít k rozhodnutí atd.

V tomto kurzu se naučíte, jak psát výrazy pro vaše programy Java. V mnoha případech budete k psaní výrazů Java používat operátory a je jich mnoho typy operátorů vědět, jak používat. Stručně představím typy operátorů jazyka Java (včetně typů aditivních, bitových, logických, podmíněných, posuvných a rovných) a jejich operandy. Dozvíte se také o důležitých konceptech, jako je přetížení operátora a přednost operátora, a uvidíte ukázku převodu primitivního typu. Na závěr budu mít malý program Java, který můžete použít k vlastnímu procvičování konverzí primitivního typu.

stáhnout Získat kód Stáhněte si zdrojový kód například pro aplikace v tomto výukovém programu. Vytvořil Jeff Friesen pro JavaWorld.

Jednoduché výrazy

A jednoduchý výraz je doslovný název proměnné nebo volání metody. Nejsou zapojeni žádní operátoři. Zde je několik příkladů jednoduchých výrazů:

52 // celé číslo doslovného věku // název proměnné System.out.println ("ABC"); // volání metody „Java“ // řetězcový literál 98,6D // dvojitý přesný literál s plovoucí desetinnou čárkou 89L // dlouhý celočíselný literál

Jednoduchý výraz má a typ, což je buď primitivní typ, nebo referenční typ. V těchto příkladech 52 je 32bitové celé číslo (int); System.out.println ("ABC"); je neplatné (prázdnota) protože nevrací žádnou hodnotu;"Jáva" je řetězec (Tětiva); 98,6D je 64bitová hodnota s plovoucí desetinnou čárkou s dvojitou přesností (dvojnásobek); a 89L je 64bitové celé číslo (dlouho). Nevíme stářítyp.

Experimentování s jshell

Tyto a další jednoduché výrazy můžete snadno vyzkoušet pomocí jshell. Například zadejte 52 na jshell> výzva a obdržíte něco jako následující výstup:

$1 ==> 52

$1 je jméno a proměnná scratch že jshell vytváří k ukládání 52. (Proměnné typu Scratch se vytvářejí vždy, když se zadávají literály.) Provést System.out.println ($ 1) a uvidíte 52 jako výstup.

Můžeš běžet jshell s -proti argument příkazového řádku (jshell -v) ke generování podrobné zpětné vazby. V tomto případě zadání 52 by mělo za následek následující zprávu odhalující tuto proměnnou scratch $1int (32bitové celé číslo) typ:

| vytvořena stírací proměnná $ 1: int

Dále zkuste zadat stáří. V takovém případě pravděpodobně obdržíte chybovou zprávu, že symbol nebyl nalezen. Java Shell to předpokládá stáří je proměnná, ale nezná její typ. Budete muset zahrnout typ; například se podívejte, co se stane, když zadáte int věk.

Složené výrazy

A složený výraz se skládá z jednoho nebo více jednoduchých výrazů integrovaných do většího výrazu pomocí operátor, což je sled instrukcí symbolicky znázorněných ve zdrojovém kódu. Operátor transformuje svůj výraz operand (s) do jiné hodnoty. Například v 6 * 5, operátor násobení (*) transformuje operandy 6 a 5 do 30.

Složené výrazy lze kombinovat do větších výrazů. Například, 6 * 5 + 10 představuje složený výraz 6 * 5 a složený výraz skládající se z jejich produktu, operátoru přidání +a číslo 10. Pořadí vyhodnocení (nejdříve vynásobte a poté přidejte) je diktováno Java pravidlo priority, ke kterému se brzy dostaneme.

Složené výrazy mohou být také jednoduché

6 * 5 je složený výraz složený ze dvou jednoduchých výrazů, 6 a 5. Ale 6 * 5 je také jednoduchý výraz z +perspektiva. The + operátor vidí pouze svůj produkt 30, což je jednoduchý výraz.

Operátory a operandy

Operátory Java jsou klasifikovány podle počtu operandů:

  • A unární operátor má například jednoho operanda unární minus (např., -5).
  • A binární operátor má dva operandy, příklady jsou násobení a sčítání.
  • A ternární operátor má tři operandy; příkladem je podmíněný operátor (?:).

Operátoři Java jsou také klasifikováni podle pozice:

  • A operátor předpony je unární operátor, který předchází svému operandu (např. -5).
  • A operátor postfixu je unární operátor, který následuje svůj operand (např. věk ++; - přidat 1 do stáříčíselná hodnota).
  • An operátor infix je binární nebo ternární operátor mezi operandy operátoru (např. věk + 5).

Další příklad jshell

Další operátory představím v následujících částech, kde uvádím příklady v podobě aplikací. Tyto operátory můžete také vyzkoušet pomocí jshell, jako tak:

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

V tomto případě nejprve zadáme výraz 6 + 2, který jshell vyhodnotí a přiřadí výslednou 8 k scratch proměnné $1. Dále se množíme $1 podle 7, který ukládá 56 v proměnné scratch $2. Tento příklad ukazuje, že ve výrazech Java můžete použít pomocné proměnné.

Přetížené operátory

Plus (+) operátor je příkladem přetížený operátor, což je operátor, který provádí jednu z několika operací na základě typy jejích operandů. Operátor plus provádí sčítání celých čísel, když jsou oba operandy celá čísla, sčítání s plovoucí desetinnou čárkou, když jsou oba operandy hodnoty s plovoucí desetinnou čárkou, a zřetězení řetězců, když jsou oba operandy řetězce. Operátor mínus (-) je také přetížen a provádí odečítání celého čísla nebo plovoucí desetinné čárky.

Typy operátorů v Javě

Aditivní operátory

The aditivní operátory zvýšit nebo snížit číselnou hodnotu sčítáním a odčítáním. Mezi aditivní operátory patří přidání (+), odčítání (-), postdecrement (--), přírůstek (++), preecrement (--) a preincrement (++). Zřetězení řetězců (+) je také považován za aditivní. Zde je formální definice pro každého z těchto operátorů:

  • Přidání: Dáno operand1 + operand2, kde každý operand musí být znakového nebo číselného typu, přidejte operand2 na operand1 a vrátit částku. Příklad: 4 + 6.
  • Odčítání: Dáno operand1 - operand2, kde každý operand musí být znakového nebo číselného typu, odečíst operand2 z operand1 a vrátit rozdíl. Příklad: 4 - 6.
  • Postdecrement: Dáno proměnná--, kde proměnná musí být znakového nebo číselného typu, odečíst od 1 proměnnáhodnota (uložení výsledku do proměnná) a vrátit původní hodnotu. Příklad: X--;.
  • Přírůstek: Dáno proměnná++, kde proměnná musí být znakového nebo číselného typu, přidat 1 do proměnnáhodnota (uložení výsledku do proměnná) a vrátit původní hodnotu. Příklad: x ++;.
  • Předčasnost: Dáno --proměnná, kde proměnná musí být znakového nebo číselného typu, odečíst 1 od jeho hodnoty, uložit výsledek do proměnná, a vrátit novou zmenšenou hodnotu. Příklad: --X;.
  • Předkrm: Dáno ++proměnná, kde proměnná musí být znakového nebo číselného typu, přidat k jeho hodnotě 1, uložit výsledek do proměnná, a vrátit novou zvýšenou hodnotu. Příklad: ++ x;.
  • Zřetězení řetězců: Dáno operand1 + operand2, kde je alespoň jeden operand z Tětiva typ, připojit operand2řetězcové vyjádření do operand1řetězcovou reprezentaci a vrátí výsledek. Příklad: „A“ + „B“.

Operátory sčítání, odčítání, postdecrement, postincrement, predecrement a preincrement mohou generovat hodnoty, které překračují limity typu výsledku. Například přidání dvou velkých kladných 64bitových celočíselných hodnot může vytvořit hodnotu, kterou nelze reprezentovat v 64 bitech. Výsledné přetečení není detekováno ani hlášeno operátory aditivní Java.

Detekce přetečení v knihovně standardních tříd Java

Knihovna standardní třídy Matematika třída zahrnuje metody pro detekci přetečení. Například, int addExact (int x, int y) přidá hodnoty do X a y, vrácení částky nebo vyvolání výjimky při přetečení.

Příklad aplikace: Aditivní operátory

Výpis 1 představuje malou aplikaci pro hraní s aditivními operátory Java.

Výpis 1. Aditivní operátory v Javě (AddOp.java)

třída AddOp {public static void main (String [] args) {System.out.println (125 + 463); System.out.println (2,0 - 6,3); int věk = 65; System.out.println (věk); System.out.println (věk -); System.out.println (věk ++); System.out.println (- věk); System.out.println (++ věk); System.out.println ("A" + "B"); }}

V předchozím tutoriálu jste se naučili, jak používat JDK javac nástroj pro kompilaci zdrojového kódu Java a Jáva nástroj pro spuštění výsledné aplikace. K sestavení výpisu 1 proveďte následující příkaz:

javac AddOp.java

Za předpokladu úspěšné kompilace byste měli dodržovat AddOp.class soubor v aktuálním adresáři. Spusťte následující příkaz:

java AddOp

AddOp reaguje vytvořením následujícího výstupu:

588 -4,3 65 65 64 64 65 AB

Studium tohoto výstupu nabízí vhled do operátorů postincrement, postdecrement, preincrement a predecrement. Pro dodatečné zvýšení / snížení stáříAktuální hodnota je vydána před operací přírůstku / snížení. U preincrement / predecrement se provede operace a její výsledek se uloží do stáří, a pak stářínovou hodnotou je výstup.

Iterace s operátory Java

Operátory aditiv jsou zvláště užitečné v kontextu iterační prohlášení, kde se používají k přechodu na další iteraci. O iteračních příkazech se dozvíte v dalším kurzu Java 101.

Operátor indexu pole

The operátor indexu pole ([]) přistupuje k prvku pole poskytnutím prvku index (pozice). Tento operátor je umístěn za názvem proměnné pole, jako v známky [0] (přístup k prvnímu prvku v poli přiřazenému známky; první prvek je uložen v indexu 0). Zde je formální definice:

Dáno proměnná[index], kde index musí být celé číslo (int) zadejte, načtěte hodnotu z nebo ji uložte do proměnnáúložný prvek na místě index. Příklad: teploty [1]

Hodnota předána index je 32bitové celé číslo, které má buď 0, nebo kladnou hodnotu v rozsahu do jedné menší než je délka pole, což je označeno připojením .délka na název pole. Například, stupně. délka vrací počet prvků v poli přiřazených známky.

Proměnné pole vs. pole

známky není pole, ale je proměnná obsahující odkaz na oblast paměti, která tvoří pole. To platí pro všechna pole Java. Je však běžné se o tom zmínit známky nebo libovolnou proměnnou pole jako pole.

Příklad aplikace: Operátor indexu pole

Výpis 2 představuje zdrojový kód ukázkové aplikace, která vám umožní hrát s operátorem indexu pole.

Výpis 2. Operátor indexu pole v Javě (ArrayIndexOp.java)

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

Výpis 2 je poněkud zajímavější než Výpis 1. Po vytvoření pětičlenného jednorozměrného pole celých čísel (pomocí inicializátoru pole) a přiřazení odkazu na pole známky, hlavní() postupuje k přístupu k různým prvkům. Zajímavé jsou dvě položky:

  • Index operátoru indexu pole musí být nakonec 32bitové celé číslo (0 nebo kladná hodnota). Můžete zadat název celočíselné proměnné (např. index), který obsahuje hodnotu indexu, jako index.
  • Můžete určit výpočet zahrnující literály znaků. (Později v tomto tutoriálu představím převody typů a zjistíte proč „C“ - „A“ vytvoří celé číslo (2), které slouží jako platný index.)

Poslední příklad, který projde 1D jako index pro operátor indexu pole je komentován, protože se nebude kompilovat. Pokud odkomentujete řádek a pokusíte se zkompilovat výpis 2, zobrazí se chybová zpráva o nekompatibilních typech: „možná ztrátová konverze z dvojnásobek na int.."

Zkompilovat výpis 2 (javac ArrayIndexOp.java) a spusťte aplikaci (java ArrayIndexOp). Měli byste dodržovat následující výstup:

90 91 79 68

Operátor indexu pole a vícerozměrná pole

Tento operátor můžete použít s vícerozměrnými poli. Například za předpokladu, že dvojrozměrný náklady pole, náklady [0] [1] přistupuje k prvku přiřazenému k prvnímu řádku (přes [0]) a druhý sloupec (přes [1]).

Operátoři přiřazení

The operátor přiřazení (=) přiřadí hodnotu výrazu proměnné (např. i = 6;), včetně prvku pole (např. x [0] = 15;). Výraz a proměnná musí být kompatibilní s přiřazením, což znamená, že jejich typy musí souhlasit. Například nemůžete přiřadit řetězcový literál celočíselné proměnné. Více o tom vysvětlím, když budeme diskutovat o převodu typů.

Složené operátory přiřazení (+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, >>>=) Vyhodnoťte výrazy a přiřaďte výsledky proměnným v jednom kroku. Každý výraz a proměnná musí být kompatibilní s přiřazením. Každý operátor slouží jako užitečná zkratka. Například místo určení x = x + 3;, můžete zadat kratší a ekvivalentní x + = 3;.

Mějte to krátké!

Místo upřesnění x = x + 1; nebo x = x - 1;, můžete zadat kratší x + = 1; nebo x - = 1;. Můžete ušetřit ještě více stisknutí kláves zadáním kratšího x ++; nebo X--;.

Bitové operátory

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