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

上述代碼片段中的代碼產生以下輸出。Java字符串中的隱形字符

一個=「你好」和b =「你好」是長度6,6,等於()爲假

雖然在控制檯上顯示的兩個ab的值是Hello‏a.equals(b)返回false。怎麼樣?

回答

9

U+200EU+200F不是可打印的字符。它們都是控制字符,它決定了文本應該如何呈現 - 無論是從左到右,還是從右到左。

你不會看到這些在終端中,他們不應該是等效的字符串。

0x200E^0x200F != 0

9

因爲字符序列不相同。僅僅因爲它在控制檯上看起來相同並不意味着對象是相同的。