News
Articles: Horrible Java
Published: May 12, 2012 - 10:40 AM

Las bellezas de Java:
Integer a = 3;
Integer b = 3;
Integer c = new Integer(3);
Integer d = new Integer(3);
Integer e = new Integer(2);
int f = 3;
if (a == b) /* Verdadero, funciona como esperado. */
System.out.println("a == b");
if (b == c) /* ¡Falso, no funciona como esperado! */
System.out.println("b == c");
if (c == d) /* ¡Falso, no funciona como esperado! */
System.out.println("c == d");
if (e < d) /* Verdadero, funciona como esperado. */
System.out.println("e < d");
if (d == f) /* Verdadero, funciona como esperado. */
System.out.println("d == f");
if (a == f) /* Verdadero, funciona como esperado. */
System.out.println("a == f");
Bueno, cualquiera puede argumentar que los primitivos son valores y los objetos referencias. ¿Pero por qué el comportamiento inconsistente entre < e == en ese sentido?
Así es como Java transforma el código arriba:
Integer a = Integer.valueOf(3);
Integer b = Integer.valueOf(3);
Integer c = new Integer(3);
Integer d = new Integer(3);
Integer e = new Integer(2);
int f = 3;
if (a == b)
System.out.println("a == b");
if (b == c)
System.out.println("b == c");
if (c == d)
System.out.println("c == d");
if (e.intValue() < d.intValue())
System.out.println("e < d");
if (d.intValue() == f)
System.out.println("d == f");
if (a.intValue() == f)
System.out.println("a == f");
Varias maneras de definir un entero, pésimo diseño, pésimo modelo de objetos, híbrido entre procedimental y objetos, sobre-abstracción (pedantismo), etc. ¡Qué lenguaje más inconsecuente! Esto es el producto de una buena máquina de mercadotecnia.
¡Lenguaje horrible!