GLI OPERATORI IN JAVA

 

     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

  Gli operatori di incremento e decremento sono rispettivamente “+ +” e “- - ” .

 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.

 

      gli operatori relazionali e condizionali

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.