字符串的char表示是否明确且固定?

时间:2014-06-28 11:06:39

标签: java string unicode equals

在Java中,是否保证toCharArray方法总是为被认为相等的字符串返回相同的表示形式?

我想不是。我会争论如下:

相同的字符串不一定是从相同的字符创建的。例如:

  

ö的Unicode代码点是U + 00F6。 Ö是U + 00D6。它也可以通过将字符U + 0308“COMBINING DIAERESIS”与“o”或“O”合成来创建。 src

如果String要返回它创建的char数组(对于比较相等的字符串可能不同),那么toCharArray将返回不同的值。

除此之外,还有Java版本的更改,导致Unicode层的修复或更改(这应该是显而易见的)。

1 个答案:

答案 0 :(得分: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()));

打印

ö等于ö是假的 öcomparisonToö是135
ö是[ö]
ö是[o,̈]

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