implementar implementacion java compareto

implementacion - java compareto date



¿Por qué se implementan de forma diferente Byte.compare() y Integer.compare()? (2)

El método Byte se puede implementar de esta manera, ya que el resultado de la resta es representable en int . Esto no es así en el otro caso. Por ejemplo:

0 - 0x80000000 == 0x80000000

y esto es negativo, por lo tanto, la comparación indicaría erróneamente que 0 es menor que -2 ^ 31

Estoy estudiando la fuente del OpenJDK.

Mi atención fue atraída por los métodos Byte.compare() y Integer.compare() :

public static int Byte.compare(byte x, byte y) { return x-y; } public static int Integer.compare(int x, int y) { return (x < y) ? -1 : ((x == y) ? 0 : 1); }

¿Por qué los métodos Byte.compare() y Integer.compare() tienen implementaciones diferentes?


La implementación de Integer.compare no utiliza la resta, ya que esto podría causar un desbordamiento en caso de que esté comparando un número entero cercano a Integer.MIN_VALUE con otro que esté cerca de Integer.MAX_VALUE .

Este desbordamiento no puede ocurrir en el caso de Byte.compare , ya que allí los valores de byte se convierten implícitamente a números enteros antes de calcular xy .

(Ver también: Especificación del lenguaje Java - 5.6.2 Promoción numérica binaria )