2012-09-23 14 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)); 

Kod w powyższym fragmencie kodu generuje następujące wyniki.Niewidoczne znaki w łańcuchach Java

a = 'Hello' i b = 'Hello' mają długość 6 i 6, równa() jest fałszywe

Chociaż wartość zarówno a i b wyświetlane na konsoli jest Hello‏ , a.equals(b) zwraca false. W jaki sposób?

Odpowiedz

9

U+200E i U+200Fnie znaków do wydrukowania. Obaj są kontrolującymi postaciami, które dyktują, jak tekst powinien być renderowany - od lewej do prawej lub od prawej do lewej.

Nie zobaczysz ich w terminalu i nie powinny to być równoważne ciągi.

0x200E^0x200F != 0

9

Ponieważ sekwencje znaków nie są identyczne. To, że wygląda tak samo na konsoli, nie oznacza, że ​​obiekty są identyczne.

Powiązane problemy