long java

long - ¿Cómo es que la clase Integer de Java no tiene el método compare()?



string java (5)

Double tiene Double.compare para comparar dos primitivas dobles. ¿Por qué Integer no tiene uno?

Entiendo que es una cantidad trivial de código para escribir, pero pedir por curiosidad.

Edición: Me doy cuenta que tanto Integer como Double tienen compareTo. Pero el uso de compareTo requiere el boxeo de la primitiva int en un objeto Integer, que tiene un costo bastante alto. Además, inta> intb no es lo mismo que compare (inta, intb), ya que este último devuelve +1, 0 o -1, mientras que el primero es verdadero / falso ...


Fue un descuido que Java 7 resolverá.

http://download.oracle.com/javase/7/docs/api/java/lang/Integer.html#compare%28int,%20int%29

comparación estática pública int (int x, int y)

Compara dos valores int numéricamente. El valor devuelto es idéntico al que devolvería:

Integer.valueOf(x).compareTo(Integer.valueOf(y))

Parámetros: x - el primer int para comparar y - el segundo int para comparar Devuelve: el valor 0 si x == y; un valor menor que 0 si x <y; y un valor mayor que 0 si x> y Desde: 1.7


La compare en Double tiene el mismo efecto que:

new Double(d1).compareTo(new Double(d2))

Lo que significa que toma en cuenta NaN , +0 y -0 (citando el documento para compareTo() ):

  • Este método considera que Double.NaN es igual a sí mismo y mayor que todos los demás valores dobles (incluido Double.POSITIVE_INFINITY).
  • Este método considera que 0.0d es mayor que -0.0d.

Dado que Integer no tiene NaN , y tanto +0 como -0 se considerarán solo 0 , tal método no es realmente necesario para la funcionalidad.


La comparación de ints de esta manera es trivial, la comparación de dobles es en realidad mucho más complicada de lo que parece. Tienes que lidiar con cosas como valores de error, y menos casos obvios como NaN.

Vea esta pregunta para más detalles.

De cualquier manera, a partir de Java 7, ¡también tendrá este método para intenciones!


Los valores de punto flotante no necesariamente pueden compararse de manera binaria, debido a la imprecisión en la representación del punto flotante, por lo tanto, se requiere que un operador compare () compare dos valores de punto flotante, esencialmente asegurándose de que la diferencia entre ellos no sea mayor que una valor de error. Los enteros se pueden comparar de manera binaria, por lo que se puede usar el operador de igualdad.


Probablemente se deba a que la operación de compare es relativamente simple (pero aún muchas personas se equivocan). Y en comparación con el double , realmente lo es.

También me gustaría tener este método incorporado, lo que hace que otras personas escriban códigos más simples. Pero mientras Oracle no lo vea como un problema, tenemos que confiar en la Guava de Google o en bibliotecas similares para proporcionar los bits faltantes.