Considere la siguiente secuencia de comandos:Groovy/String de Java
def a = new HashSet()
def str1 = "str1"
def str2 = "str2"
def b = "$str1-$str2"
def c = "str1-str2"
println "b: $b"
println "c: $c"
println "b.equals(c): " + (b.equals(c))
println "b == c: " + (b == c)
println "b.compareTo(c): " + (b.compareTo(c))
a.add(b)
println "a.contains(c): " + a.contains(c)
que tiene el siguiente resultado cuando se ejecuta con Groovy 1.8 y JDK 1.6.0_14:
b: str1-str2
c: str1-str2
b.equals(c): false
b == c: true
b.compareTo(c): 0
a.contains(c): false
Las dos cadenas "b "y" c "imprimen la misma secuencia de caracteres pero b.equals (c) es falso. Según el manual de JDK 1.6, la función equals() debería ser la siguiente:
Compara esta cadena con el objeto especificado. El resultado es verdadero si y solo si el argumento no es nulo y es un objeto String que representa la misma secuencia de caracteres que este objeto.
¿Por qué equals() no devuelve el valor documentado y demostrado anteriormente? Extrañamente, compareTo() devuelve 0!
¿Cuál es el tipo de 'b'? Tal vez es un 'StringBuffer' o algo así? –