Expresiones y Operadores en Java

Expresiones

Una expresión es una combinación de variables, operadores y llamadas de métodos construida de acuerdo a la sintaxis del lenguaje que devuelve un valor.

El tipo de dato del valor regresado por una expresión depende de los elementos usados en la expresión.

Operadores

Los operadores son palabras claves del lenguaje que permiten la ejecución de operaciones en el contenido de ciertos elementos, en general variables, constantes, valores literales, o retornos de funciones. La combinación de uno o varios operadores y elementos en los cuales los operadores van a apoyarse se llama una expresión. Estas expresiones se evalúan en el momento de la ejecución en función de los operadores y de los valores asociados.

Java dispone de dos tipos de operadores:

  • Los operadores unarios que trabajan sólo en un operando.
  • Los operadores binarios que necesitan dos operandos.

Se pueden utilizar los operadores unarios con la notación prefijada. En este caso, el operador se sitúa antes del operando. También la notación puede aparecer postfijada, y en este caso, el operador se sitúa después del operando. La posición del operador determina el momento en el que éste se aplica a la variable. Si el operador está prefijado, se aplica en el operando antes que éste sea utilizado en la expresión. Con la notación postfijada del operador se aplica en la variable sólo después de la utilización de ésta en la expresión. Esta distinción puede influir en el resultado de una expresión.

int i;
i=3;
System.out.println(i++);

Muestra 3 porque el incremento se ejecuta después de la utilización de la variable con la instrucción println.

int i;
i=3;
System.out.println(++i);

Muestra 4 porque el incremento se ejecuta antes de utilizar la variable con la instrucción println.

Si la variable no se utiliza en una expresión, las dos versiones llevan al mismo resultado.

La línea de código

i++;

es equivalente a la línea de código

++i;

Se pueden repartir los operadores en siete categorías.

1. Los operadores unarios

Operadores Unarios

Sólo se puede utilizar el operador ! (exclamación) en variables de tipo boolean o en expresiones que producen un tipo boolean (comparación).

2. Los operadores de asignación

El único operador disponible en esta categoría es el operador =. Permite asignar un valor a una variable. Se utiliza el mismo operador sea cual sea el tipo de la variable (numérico, cadena de caracteres…).

Se puede combinar este operador con un operador aritmético, lógico o binario.

La sintaxis siguiente

x+=2;

equivale a:

x=x+2;

 

3. Los operadores aritméticos

Los operadores aritméticos permiten efectuar cálculos en el contenido de las variables.

Operadores Aritmeticos

4. Los operadores bit a bit

Estos operadores efectúan operaciones únicamente con enteros (Byte, Short, Integer, Long). Trabajan a nivel de bit en las variables que manipulan.

Operadores bit a bit

5. Los operadores de comparación

Se utilizan operadores de comparación en las estructuras de control de una aplicación (if, while…). Devuelven un valor de tipo boolean en función del resultado de la comparación efectuada. Luego la estructura de control utilizará este valor.

Operadores de Coomparacion

6. El operador de concatenación

El operador + (más) ya utilizado para la suma se utiliza también para la concatenación de cadenas de caracteres. El funcionamiento del operador viene determinado por el tipo de los operandos. Si uno de los operandos es del tipo String, el operador + (más) efectúa una concatenación con, eventualmente, una conversión implícita del otro operando a cadena de caracteres.

Un pequeño inconveniente del operador + (más) es que no destaca por su velocidad para las concatenaciones. En realidad no es realmente el operador la fuente del problema sino la técnica utilizada por Java para gestionar las cadenas de caracteres (no se pueden modificar después de su creación). Si tenemos que ejecutar varias concatenaciones en una cadena, es preferible utilizar la claseStringBuffer.

Ejemplo

long duración; 
  String liebre; 
  String tortuga=""; 
  long principio, fin; 
  principio = System.currentTimeMillis(); 
  for (int i = 0; i <= 10000; i++) 
  { 
      tortuga = tortuga + " " + i; 
  } 
  fin = System.currentTimeMillis(); 
  duración = fin-principio; 
  System.out.println("duración para la tortuga: " + duración + "ms"); 
  principio = System.currentTimeMillis(); 
  StringBuffer sb = new StringBuffer(); 
  for (int i = 0; i <= 10000; i++) 
  { 
      sb.append(" "); 
      sb.append(i); 
  } 
  liebre = sb.toString(); 
  fin = System.currentTimeMillis(); 
  duración = fin-principio; 
  System.out.println("duración para la liebre: " + duración + "ms"); 
  if (liebre.equals(tortuga)) 
  { 
      System.out.println("las dos cadenas son idénticas"); 
  }

Resultado de la carrera:

duración para la tortuga: 953ms
duración para la liebre: 0ms
las dos cadenas son idénticas

¡Este resultado no necesita comentarios!

7. Los operadores lógicos

Los operadores lógicos permiten combinar las expresiones en estructuras condicionales o estructuras de bucle.

Operadores Logicos

Tendremos que tener cuidado con los operadores && (doble ampersand) y || (tubería doble) porque la expresión que probaremos en segundo lugar (test2 en nuestro caso) a veces no se podrá ejecutar. Si esta segunda expresión modifica una variable, ésta sólo se modificará en los casos siguientes:

primer test verdad en el caso del &&
primer test falso en el caso del ||

8. Orden de evaluación de los operadores

Cuando se combinan varios operadores en una expresión, se evalúan en un orden muy preciso. Los incrementos y decrementos prefijados se ejecutan primero, luego las operaciones aritméticas, las operaciones de comparación, los operadores lógicos y por fin, las asignaciones.

Los operadores aritméticos también tienen entre ellos un orden de evaluación en una expresión. El orden de evaluación es el siguiente:

  • Negación (-)
  • Multiplicación y división (*, /)
  • División entera (\)
  • Módulo (Mod)
  • Suma y sustracción (+, -), concatenación de cadenas (+)

Si se necesita establecer un orden de evaluación diferente, tendremos que ubicar las expresiones con prioridad entre paréntesis como en el siguiente ejemplo:

X= (z * 4) ˆ (y * (a + 2));

En una expresión podemos utilizar tantos niveles de paréntesis como deseemos. Sin embargo es importante que la expresión contenga tantos paréntesis de cierre como de apertura, si no el compilador generará un error.

Taller de Desarrollo con Javascript

Regístrate en nuestra plataforma en linea para tener acceso completo y gratuito del taller

Registrarme

Taller de desarrollo de Pokedex con Android Studio

Regístrate en nuestra plataforma en linea para tener acceso completo y gratuito del taller

Registrarme