在Java中,是否保证toCharArray方法总是为被认为相等的字符串返回相同的表示形式?
我想不是。我会争论如下:
相同的字符串不一定是从相同的字符创建的。例如:
ö的Unicode代码点是U + 00F6。 Ö是U + 00D6。它也可以通过将字符U + 0308“COMBINING DIAERESIS”与“o”或“O”合成来创建。 src
如果String要返回它创建的char数组(对于比较相等的字符串可能不同),那么toCharArray将返回不同的值。
除此之外,还有Java版本的更改,导致Unicode层的修复或更改(这应该是显而易见的)。
答案 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, ̈]