Operadores y expresiones

Los programas en Java constan de datos, sentencias de programas y expresiones. Una expresión es, normalmente, una ecuación matemática, como 3 + 5. En esta expresión, el símbolo más (+) es el operador de suma, y los números 3 y 5 se llaman operandos. En síntesis, una expresión es una secuencia de operadores y operandos que especifica un cálculo. Como en la mayoría de los lenguajes, Java permite formar expresiones utilizando variables, constantes y operadores aritméticos.

A tener en cuenta

Una expresión es un elemento de un programa que toma un valor. En algunos casos puede también realizar una operación y se pueden utilizar en cualquier lugar.

Las expresiones pueden ser valores constantes o variables simples, como 25 o ‘z’; pueden ser valores o variables combinadas con operadores (a++, m==n, etc) o bien puede ser valores combinados con funciones como toUpperCase().

Operador de Asignación

El operador de asignación, =, asigna el valor de la expresión derecha a la variable situada a su izquierda.

         codigo = 3457;
         Fahrenheit = 123.456;
         coordX = 525;
         coordY = 725;

Este operador es asociativo por la derecha; eso permite realizar asignaciones múltiples. Así,

         a = b = c = 45;

equivale a 

        a = (b = (c = 45));

o dicho de otro modo, a las variables a, b y c se asigna el valor 45. Esta propiedad permite inicializar varias variables con una sola sentencia:

       int a, b, c;
       a = b = c = 5;                         /* se asigna 5 a las variables a, b y c */

Además del operador de asignación =, Java proporciona cinco operadores de asignación adicionales.

Estos operadores de asignación actúan como una notación abreviada para expresiones utilizadas con frecuencia. Así, por ejemplo, si se desea multiplicar 10 por i, se puede escribir,

       i = i * 10;

Java proporciona un operador abreviado de asignación (*=), que realiza una asignación equivalente,

       i *= 10;            equivale a           i = i * 10;

Además, estos operadores de asignación no siempre se utilizan, aunque algunos programadores Java se acostumbran a su empleo por el ahorro de escritura que suponen.

Operadores aritméticos

Los operadores aritméticos sirven para realizar operaciones aritméticas básicas. Los operadores aritméticos Java siguen las reglas algebraicas típicas de jerarquía o prioridad. Cinco operadores se utilizan para operaciones básicas en Java: + – * / y % (módulo). El operador / representa la división entera si ambos argumentos son enteros y división en coma flotante, en caso contrario.

          15/2                    es igual a 7
          15%2                  es igual a 1
          15.0/2                es igual a 7.5

Ya se ha tratado anteriormente, pero es importante recordarlo; asignación múltiple en operadores:

          x = y = z = 15;                          //a todas las variables se les asigna el valor 15
          x += y;                                      equivale a      x = x + y;
          x /= y;                                       equivale a      x = x / y;

Operadores de incrementación y decrementación

Dos características que incorpora Java, una de las más útiles son los operadores de incremento ++ y decremento —. Los operadores ++ y –, denominados de incrementación y decrementación, suman o restan 1 a su argumento, respectivamente, cada vez que se aplican a una variable. Por consiguiente,

        a++

es igual que,

        a = a + 1;

Existen al igual que C y C++, dos formas en estos operadores: postfija (el operador se sitúa después del operando) y prefija (el operador se sitúa delante del operando). Las sentencias

  • Prefija: Incrementa n en 1 y luego usa el nuevo valor de n en la expresión en la que n reside.

            ++n;                          incrementa 1 al valor de la variable n                          
            ––n;                          resta 1 al valor de la variable n

  • Postfija: Usa el nuevo valor de n en la expresión en la que n reside, y luego incrementa n en 1.

            n++;                          incrementa 1 al valor actual de la variable n                          
            n––;                          resta 1 al valor actual de la variable n

Ejemplo

          int x;
          int y;

         // Operadores de incremento
         x = 1;
         y = ++x;                        // x es ahora 2, y es también 2
         y = x++;                        // x es ahora 3, y es 2

         // Operadores de decremento
         x = 3;
         y = x––;                        // x es ahora 2, y es 3
         y = ––x;                        // x es ahora 1, y es también 1

Operadores relacionales

Los operadores relacionales se usan normalmente en sentencias de selección (if) o de iteración (while, for), que sirven para comprobar una condición. Utilizando operadores relacionales se realizan operaciones de igualdad, desigualdad y diferencias relativas; se pueden aplicar a operandos de cualquier tipo de dato estándar: char, int, float, double, etcétera.

Cuando se utilizan los operadores en una expresión, el operador relacional produce un 0, o un 1, dependiendo del resultado de la condición. 0 se devuelve para una condición falsa, y 1 se devuelve para una condición verdadera. Por ejemplo, si se escribe,

           c = 3  <  7;

la variable c se pone a 1, dado que como 3 es menor que 7, entonces la operación < devuelve un valor de 1, que se asigna a c.

Precaución

Un error típico, incluso entre programadores experimentados, es confundir el operador de asignación (=) con el operador de igualdad (==).

Ejemplo

          ‘a’ != ‘b’
          7 < 15
          22 > 12
          15 <= 20
          35 >= 25

Operadores lógicos

Además de los operadores matemáticos, Java tiene también operadores lógicos. Estos operadores se utilizan con expresiones para devolver un valor verdadero (cualquier entero distinto de cero) o un valor falso (0). Los operadores lógicos se denominan también operadores booleanos, en honor de George Boole, creador del álgebra de Boole. 

Los operadores lógicos de Java son: ! (not), && (and) y || (or). El operador lógico ! (not, no) produce falso (cero) si su operando es verdadero (distinto de cero) y vicerversa. El operador lógico && (and, y) produce verdadero solo si ambos operandos son verdadero (no cero); si cualquiera de los operandos es falso produce falso. El operador lógico || (or, o) produce verdadero si cualquiera de los operandos es verdadero (distinto de cero) y produce falso solo si ambos operandos son falsos. 

Al igual que los operadores matemáticos, el valor de una expresión formada con operadores lógicos depende de: a) el operador y b) sus argumentos. Con operadores lógicos existen solos dos valores posibles para expresiones: verdadero y falso. La forma más usual de mostrar los resultados de operaciones lógicas es mediante las denominadas tablas de verdad, que muestran cómo funcionan cada uno de los operadores lógicos.

Ejemplo

             !(x + 7 == 5)
             (anum > 5)     &&    (Respuesta == ‘S’) 

             !(y / 7 == 5)
             (bnum < 5)     ||      (Respuesta == ‘F’)

Operador condicional (?:)

Java cuenta con el operador condicional (?:), que en ocasiones puede utilizarse en lugar de una instrucción if-else. Éste es el único operador ternario en Java; es decir, que utiliza tres operandos. En conjunto, los operandos y el símbolo ?: forman una expresión condicional. El formato del operador condicional es:

             condición ? expresión1 : expresión2;

El operador se ejecuta evaluando condición. Si la condición es verdadera entonces se evalúa la expresión1, en caso contrario, si la condición es falsa se evalúa la expresión2. La precedencia de ?: es menor que la de cualquier otro operando tratado hasta ese momento.

Ejemplo

             System.out.println(calificacionEstudiante >= 60 ? «Aprobado» : «Desaprobado»);
             n>=0  ?  1  :  -1                      // 1 si n es positivo, -1 si n es negativo
             m>=n ?  m  :  n                     // devuelve el mayor valor de m y n

  • Las expresiones condicionales son más difíciles de leer que las instrucciones if-else, por lo cual deben usarse para reemplazar sólo a las instrucciones if-else simples que seleccionan una de dos valores (sentencias). (Ver Sentencia-if/else)