2014-06-28 35 views
1

在Java中,是否可以保證toCharArray方法總是返回相同的字符串表示形式?我想不是。我想不是。我會爭辯以下幾點:字符串的字符表示是否不同並且是固定的?

相等的字符串不一定是由相同的字符創建的。例如:

ö的Unicode代碼點是U + 00F6。 Ö是U + 00D6。它也可以通過將字符U + 0308「合併透視」與「o」或「O」合成來創建。 src

如果一個字符串返回它創建的char數組(它可能與比較相等的字符串不同),那麼toCharArray將返回不同的值。

除此之外,還有Java版本更改,導致Unicode層中的修復或更改(這應該是顯而易見的)。

回答

4

只因爲它們看起來一樣,不會使它們相同。

String o1 = "\u00F6"; 
String o2 = "o\u0308"; 
System.out.println(o1 + " equals to " + o2 + " is " + o1.equals(o2)); 
System.out.println(o1 + " compareTo " + o2 + " is " + o1.compareTo(o2)); 
System.out.println(o1 + " is " + Arrays.toString(o1.toCharArray())); 
System.out.println(o2 + " is " + Arrays.toString(o2.toCharArray())); 

打印

ö等於ö是假
ö的compareToö是135
ö是[O]
ö是[O,̈]

ö equals to ö is false 
ö compareTo ö is 135 
ö is [ö] 
ö is [o, ̈] 
+0

我很驚訝地發現String沒有使用Unicode比較。 – mafu

+0

@mafu一個字符串有一個unicode字符,另一個有兩個字符。他們可能看起來一樣,但他們不是。 –

相關問題