2012-09-23 50 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

因为字符序列不相同。仅仅因为它在控制台上看起来相同并不意味着对象是相同的。