Hola,
tal y como has dicho, la comparacion de Strings se puede realizar con los operadores == y != o con el metodo compareTo(); pero tambien se puede realizar con el metodo Equals().
La diferencia entre ellos:
==, != y Equals() devuelven un booleano segun el caso (sea igual o distinto y el operador usado)
compareTo() devuelve un int. Creo que devuelve 0 (cero) cuando las cadenas son iguales; > 0 (mayor que cero) cuando el primer string es mas grande (alfabeticamente) que el segundo; y < 0 (menor que cero) cuando el primer string es mas pequeño (alfabeticamente) que el segundo.
En cuanto a ventajas y desventajas... no lo se. YO casi nunca he utilizado compareTo(), porque luego siempre tengo que comparar el int que me devuelve para saber si los strings eran iguales o no. Lo que se me ocurre es que puede servir para ordenar alfabeticamente una serie de strings.
Espero haberte aclarado algo.
Saludos