operatori aritmetici
In Java sono disponibili diversi operatori aritmetici che trattano qualunque tipo numerico:
+ addizione
- sottrazione
* moltiplicazione
/ divisione
% resto o modulo
è inoltre possibile il - unario per la negazione; è possibile cambiare segno a un numero, utilizzando un’istruzione come
val = -val ;
è possibile utilzzare anche il + unario, come in +65; esso è stato incluso per ragioni di simmetria, altrimenti non sarebbe possibile scrivere costanti come +6423.0.
operatori di incremento e decremento
L’espressione x++ equivale a x = x +, salvo il fatto che x viene valutata una seconda volta.
Per esempio :
array[where()]++
where viene chiamato sola una volta, e se ne utilizza il risultato come indice dell’array una sola volta.
Invece nell’istruzione:
array[where()] = array[where()]
+1;
where viene chiamato due volte: una per determinare l’indice del lato destro, l’altro per determinare l’indice del lato sinistro. Nel caso le due invocazioni di where restituissero valori differenti, il risultato sarebbe completamente differente da quello dell’espressione precedente.
gli operatori di incremento e
decremento possono essere prefissi o postfissi, trovandosi
rispettivamente, prima e dopo il rispettivo operando.
Se l’operatore si trova prima(prefisso), esso viene applicato prima di restituire il valore dell’espressione; se, al contrario, si trova dopo( postfisso), esso viene applicato dopo aver utilizzato il valore originale.
Gli operatori di incremento e decremento ++ e – possono essere applicati anche a variabili di tipo char, al fine di ottenere il successivo o il precedente carattere Unicode.
In Java è disponibile un insieme di standard di operatori e di uguaglianza:
Ø > maggiore di
Ø <= maggiore o uguale a
Ø < minore o uguale a
Ø == uguale a
Ø != diverso da
questi operatori restituiscono valori boolean.
L’operatore unario “!” inverte un valore booleano:
!true
è uguale a
false
i valori booleani vengono testati direttamente e i risultati di espressioni booleane possono essere legati con i simboli && e ||, che rappresentano rispettivamente l’ AND condizionale e l’OR condizionale.
Quando possibile si evita la valutazione del secondo operatore:
boolean w;
boolean x;
boolean y;
boolean z;
if ( w && x ) {
// if esterno
if ( y || z ) {//
if interno
//…. ..corpo dell’if interno
}
}
l’if interno viene eseguito solo se sia w sia x risultano true. Se w è false, x non viene valutata. Il corpo dell’if interno viene eseguito se almeno una delle due variabili y e z vale true. Se y è true, Java non valuta z.
Gli unici operatori che agiscono su valori booleani sono gli operatori di uguaglianza = = e !=, in quanto è privo di senso chiedere se true sia maggiore o minore di false.
I valori in virgola mobile seguono l’ordinamento consueto ( -1.0 è minore di 0.0 che, a sua volta, è minor dell’infinito positivo ), eccetto NaN che è anomalo.
Tutti gli operatori relazionali e di uguaglianza applicati ad un operando NaN restituiscono false, salvo “! =” che restituisce true. Tutto ciò è vero anche nel caso che entrambi i valori siano NaN.
È sempre possibile applicare il test di uguaglianza a due riferimenti di oggetti:
rifer1 == rifer2
è true se i due riferimenti si riferiscono allo stesso oggetto o se entrambi sono null, anche nel caso in cui i due riferimenti siano stati dichiarati di tipi diversi.
Altrimenti è false.
Gli operatori di uguaglianza su oggetti
string:
str1 == str2
è true se si riferiscono allo stesso oggetto referenziato, e non se hanno lo stesso contenuto.
Altrimenti è false.
L’uguaglianza dei contenuti può
essere verificata utilizzando il metodo String.equals.
operatori orientati ai bit
Gli operatori binari orientati ai bit sono:
&
AND bit a bit
|
OR inclusivo bit a bit
^
OR esclusivo bit a bit( XOR)
è disponibile anche l’operatore unario di complemento bit a bit ~, che complementa ogni bit del proprio operando:
il valore int 0x00003333 ha come valore complementato 0xffffcccc.
Gli altri operatori orientati ai bit sono gli operatori di shift, utilizzati per far scorrere i bit del numero di posizioni specificato da un valore intero; sono:
<< shift verso sinistra; le posizioni sul lato destro vengono riempite shift verso destra; le posizioni sul lato sinistro vengono riempite
>> shift verso destra; le posizioni sul lato sinistro vengono riempite con bit coincidenti col bit più significativo (bit di segno )
>>> shift verso destra; le posizioni sul lato sinistro vengono riempite di zeri.
operatore condizionale ?:
l’operatore condizionale permette di scrivere un’unica espressione in grado di produrre uno tra i valori, scelto in base al risultato di un’espressione booleana:
value = ( espres ?
MioVal : DefaultVal)
è equivalente a:
if ( espres ) //se l’espressione è vera
value = MioVal; //sostituisci il valore assegnato
else //altrimenti
value = DefaultVal; //sostituisci il valore di default
La differenza fondamentale tra l’istruzione if e l’operatore “?:” sta nel fatto che quest’ultima produce sempre un valore.
L’operatore “?:”, detto
anche “operatore domanda/due punti “è l’unico operatore del
linguaggio Java ternario.
operatori di assegnamento
L’operatore base per l’assegnamento è il semplice “=”.
Altre possibili forme di assegnamento: ogni operatore
aritmetico o orientato ai bit può essere concatenato con = per ottenere un
altro operatore di assegnamento:
arr[where()] += 24;
equivale
a
arr[where()] = arr[where()] + 24;
tranne che l’espressione sul lato sinistro viene valutata una volta sola.