2011-06-13 20 views
7

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!

+0

¿Cuál es el tipo de 'b'? Tal vez es un 'StringBuffer' o algo así? –

Respuesta