# Java/Operatori

| Java Linguaggio Java categoria · sviluppo · Come posso contribuire? → Vai su Wikiversity | Java: Guida alla programmazioneJava/Introduzione - Specifica di linguaggio - Libreria standardJava/Comunicazione seriale Tipi di datoJava/Tipi di dato • EspressioniJava/Operatori • VariabiliJava/Variabili locali • IstruzioniJava/Istruzioni • Strutture di controlloJava/Strutture di controllo • PackageJava/Package Classi e oggettiJava/Classi e oggetti • OggettiJava/Oggetti • MetodiJava/Metodi • Metodi (cont.)Java/Metodi/2 • ArrayJava/Array Modificatori di accessoJava/Modificatori di accesso • EreditarietàJava/Ereditarietà Gestione delle eccezioniJava/Gestione delle eccezioni • GenericsJava/Generics Thread e parallelismoJava/Multithreading • Interblocco ricontrollatoJava/Interblocco ricontrollato Alcune differenze con il CJava/Concetti fondamentali • LessicoJava/Lessico • GrammaticaJava/Grammatica |

## Espressioni

Un'espressione è una scrittura nel codice sorgente del programma che, a tempo di esecuzione, identificherà un valore di un certo tipo. Una variabile contiene un valore, mentre una espressione restituisce un certo valore come risultato di un calcolo.
Le espressioni sono costituite da elementi componibili, che possono essere combinati un numero di volte arbitrario, a patto di rispettarne la sintassi. Alcuni rappresentano a loro volta delle espressioni, altri ne combinano due o più secondo delle regole ben precise. Ad esempio, i valori letterali 3 e 5 rappresentano, a tempo di esecuzione, i rispettivi numeri interi, e possono essere usati come espressioni numeriche; ma possono anche essere combinati, tramite l'operatore di somma, per formare una nuova espressione, come 3 + 5.
Quindi, una espressione può essere vista come una struttura ad albero, in cui ogni elemento è un nodo terminale o una combinazione di altri elementi.

### Elementi sintattici

Gli elementi che compongono una espressione sono
* valori letterali
* operatori: confrontano due o tre espressioni e restituiscpno un risultato in base a queste
* invocazioni di metodi
* letture e scritture di variabili locali, campi o celle di array
* coppie di parentesi tonde che racchiudono una espressione (a volte utili per garantire o evidenziare la precedenza tra gli operatori)

### Valori letterali

Un valore letterale è uno dei seguenti:
* null
* true e false
* un valore letterale stringa
* un class literal

## Operatori - Definizione

Classifichiamo gli operatori in tre categorie a seconda del numero di operandi: unari (uno), binari (due) e ternari (tre). Cominciamo da quelli binari, i più comuni.

### Operatori binari

Gli operatori binari possono essere divisi in:

#### Algebrici

Sono i quattro operatori algebrici fondamentali, a cui si aggiunge quello di resto della divisione e hanno lo stesso significato che assumono in aritmetica.
si usano per eseguire operazioni di somma, sottrazione, divisione e moltiplicazione:

#### Relazionali

Sono detti 'relazionali' perché non hanno per risultato un numero, ma confrontano i due operandi e restituiscono un valore di verità:
vengono usati ovunque sia richiesto un test di verità:
Fai attenzione alla differenza tra == e .equals, che verrà affrontata quando parlemo di oggetti (nel caso di tipi semplici non si può utilizzare la seconda forma).

#### Booleani

Sono detti cosí in onore di chi li ha introdotti: G. Boole. Per chiarezza -gli errori di programmazione sono sempre in agguato- sono suddivisi in logici e orientati ai bit.

##### Logici

Agiscono su intere proposizioni e possono essere usati solo nei test (if, for, do, while), per congiungere più condizioni:
Questi implementano la cosiddetta "valutazione a corto circuito", in quanto è garantito che vengono esaminate solo le proposizioni necessarie a stabilire il valore di veritá: se in
la prima invocazione a metodo restituisce false, allora la seconda non sarà affatto eseguita, e l'intera condizione restituirà false.

##### Orientati ai bit

Agiscono su i singoli bit di cui sono composti gli operandi, eseguono cioè l'operazione su ogni coppia di bit (i primi, i secondi...) separatamente. Vanno applicati solo alle variabili numeriche.

#### Funzionali

Java ha aggiunto un operatore funzionale binario:
Per ora ignoratelo. Tornerà utile quando tratteremo classi e eredità.

#### Operatori #=

Istruzioni come:
sono molto frequenti nella scrittura di programmi, cosí è stata inventata una forma abbreviata, il cui significato è identico a quelle precedenti,
il loro uso rende il codice più intuitivo (io penso "Aggiungi a a b", non "Aggiungi a a b e metti il risultato in a") ma è un fatto personale, per il compilatore
sono equivalenti.
È sconsigliato -ma legittimo- l'uso di:
È invece un errore scrivere:
La facilità con cui si incontra l'operazione
è tanto elevata che ne è stata concepita una forma ancora più breve:
Sono equivalenti in genere, ma la prima incrementa la variabile prima di utilizzarla, la seconda dopo. Ciò è di vitale importanza in istruzioni (a cui i programmatori C sono abituati, ma che è buona norma non usare in Java) come:
ma indifferente in:
Le stesse considerazioni valgono per a-- e --a.

## Operatori unari

Agiscono su una sola variabile, alcuni richiedono che il risultato sia assegnato a una seconda, altri no.

### Algebrici

Ha significato uguale al corrispettivo algebrico:
il risultato deve essere assegnato a una variabile;

### Booleani

Il significato è lo stesso che hanno in algebra booleana.
non è obbligatorio assegnarne il valore a un'altra variabile, ma potrebbe rendere incomprensibile il tuo programma.
Alcuni sono unari, malgrado abbiano due operandi:
Il significato di "spostare bit a bit" è molto più semplice di quanto si pensi:

### Casting
## Operatori Ternari

È facile avere a che fare con variabili che devono assumere due valori differenti data una condizione. Per esempio:
L'operatore ?: sostituisce questa scrittura, pesante e pedante:
che equivale alla precedente (ed è molto più comoda).