2012-09-23 88 views
7
String a = "Hello\u200e"; 
String b = "Hello\u200f"; 

System.out.println("a = '" + a + "' and b = '" + b + "' are length " 
        + a.length() + " and " + b.length() 
        + ", equals() is " + a.equals(b)); 

El código en el fragmento de código anterior produce la siguiente salida.Caracteres invisibles en Java Strings

a = 'Hola' y b = 'Hola' son de longitud 6 y 6, es igual a() es falsa

Aunque el valor de ambos a y b que aparece en la consola es Hello‏ , a.equals(b) devuelve false. ¿Cómo?

Respuesta

9

U+200E y U+200F son no caracteres imprimibles. Ambos son caracteres de control que dictan cómo se debe representar el texto, ya sea de izquierda a derecha o de derecha a izquierda.

No los verá en el terminal, y no deberían ser cadenas equivalentes.

0x200E^0x200F != 0

9

Porque las secuencias de caracteres no son idénticas. El hecho de que aparezca igual en la consola no significa que los objetos sean idénticos.

Cuestiones relacionadas