Skip to content

Curiosidades Java: Operadores Incrementales y Decrementales

12 julio 2011

En Java existen un par de operadores aritméticos que nos van a permitir incrementar (++) o decrementar (--) en una unidad el valor de una variable. Estos dos operadores pueden colocarse antes (prefijos) o después (sufijos) de la variable. De esta forma, podemos incrementar el valor de una variable de tipo int de la siguiente forma:

int i = 0;
i++; //i tendrá el valor 1
++i; //ahora i tiene el valor 2

Pero, ¿Ambos operadores actúan del mismo modo?¿Hay alguna diferencia en utilizar el operador en forma de prefijo con respecto al sufijo? Obviamente y como habréis deducido, sí existe una diferencia (si no esta entrada no tendría mucho sentido). Esta diferencia es bastante sutil, pero no por ello menos importante y debemos tenerla en cuenta a la hora de utilizar estos operadores.

La regla es la siguiente:

Cuando el operador se utiliza en su forma de sufijo (i++) el valor de ‘i’ se incrementa sólamente después de que el valor actual de ‘i’ haya sido utilizado en la expresión.

Veamos esto mismo con un ejemplo:

int i = 0;
System.out.println("El valor de i es: " + i++);
//En consola veremos que se ha escrito: El valor de i es: 0
System.out.println("Ahora i vale: " + i);
//En consola veremos: Ahora i vale: 1

Como véis el incremento de ‘i’ no sucede hasta que el valor actual de ‘i’ ha sido utilizado en la primera sentencia System.out.println.

En cambio si utilizamos el operador en su forma de prefijo (++i), primero se produce el incremento y después se utiliza el valor incrementado de ‘i’ en la expresión, por ejemplo:

int i = 0;
System.out.println("El valor de i es: " + ++i);
//En consola veremos que se ha escrito: El valor de i es: 1
System.out.println("Ahora i vale: " + i);
//En consola veremos: Ahora i vale: 1

En esta ocasión, como puede apreciarse, primero se incrementa ‘i’ y luego se utiliza su valor en la expresión.

Estas mismas reglas sirven para el operador decremental: --

Debemos tener en cuenta estas reglas, especialmente si utilizamos estos operadores en bucles for, while o sentencias de control de flujo como if, por ejemplo. Vamos a ver otro ejemplo:

int x = 2; int y = 3; 
if ((y == x++) | (x < ++y)) {
     System.out.println("x = " + x + " y = " + y); 
}

¿Qué creeis que imprimirá en consola este código? A primera vista parece un código simple, pero si os fijáis bien, en la sentencia if, puede que no tengamos tan claro qué valores tendrán ‘x’ e ‘y’ en cada momento. Vemos la solución:

La sentencia if de la segunda línea podemos leerla del siguiente modo: Si ((3 == 2) Or (3 < 4)) Entonces …

Por tanto, lo que obtendremos impreso en la consola será: “x = 3 y = 4”

Cualquier duda, mejora, sugerencia…será siempre bien recibida😉

One Comment leave one →
  1. Buhonero1211 permalink
    12 abril 2015 07:08

    Muchas gracias por el aporte, la verdad es que está muy bien explicado y me ayudaron bastante, gracias nuevamente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: