Java - Duda compareTo

 
Vista:

Duda compareTo

Publicado por Vicente (1 intervención) el 29/12/2018 11:39:02
Hola buenas, mi duda es la siguiente:
Tengo este compareTo:
String a = "8";
String b = "10";
a.compareTo(b);
Este compareTo me devuelve un entero positivo, lo que significa que 8 es mayor que 10, lo cual me extraña.
Si se lo preguntan, los numeros los meto en un String porque son listas que pueden ser de cualquier tipo, pero deben de ser de numeros.

Gracias y Felices Fiestas ^^
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Duda compareTo

Publicado por Kabuto (1381 intervenciones) el 30/12/2018 00:04:45
No puedes esperar obtener una comparación de valor numérica usando String.
En este caso la comparacion es distinta, el String no sabe absolutamente nada de números, solo sabe de caracteres alfanuméricos.
Y decide que "8" es mayor que "10", porque el se fija en el "1" del "10", y considera que al ordenarlos por orden alfabético, el "1" va antes que el "8", por tanto, el "8" es mayor...
Pero repito, no mayor numéricamente, sino mayor al ordenar alfabéticamente.
Asi que, tanto el "10", como el "100" o como el "100000000000000000000000000000000000" .... el compareTo() te dirá que son "menores" qu el "8", es decir, que el "8" va después de ellos si ordenamos alfabéticamente.

Porque compareTo() lo que hace es indicar cual va antes o después, al ordenar alfabéticamente.

Esto es así en cualquier ámbito donde queramos un orden alfabético, por ejemplo en Windows.
Si en Windows creas carpetas con estos nombres:
4_Carpeta
8_Carpeta
10_Carpeta

Y le dices que te las ordene alfabéticamente, verás que la primera que te pondrá delante será 10_Carpeta....cuando seguramente teníamos la esperanza de que la pusiera la última...

Si quieres obtener una comparación numérica, es decir, comparar valores numéricos y no orden alfabético, no te queda otra que convertir esos String a int o Integer.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar