【发布时间】:2020-03-20 08:07:28
【问题描述】:
我试图获得 'ü' == 'ü' 的相等性。如果我这样写(在 sout 中),这将返回 true。但在我的代码中:
static Character[] charset = {'ü'};
public static void main(String[] args) {
ArrayList<Character> mustContain = new ArrayList<>();
mustContain.add('ü');
ArrayList<Character> removal = new ArrayList<>();
for (int i = 0; i < charset.length; i++) {
for (int j = 0; j < mustContain.size(); j++) {
if(charset[i] == 'ü' && mustContain.get(j) == 'ü') {
System.out.println(charset[i] instanceof Character);
System.out.println(mustContain.get(j) instanceof Character);
}
if(charset[i] == (mustContain.get(j))){
System.out.println("added");
removal.add(mustContain.get(j));
}
}
}
System.out.println(Arrays.toString(removal.toArray()));
}
这是结果:
true
true
[]
我希望得到的是:
true
true
added
[ü]
我只能通过 charset[i].equals(mustContain.get(j))
来获得这种相等性但是对于字符“a”,代码一切正常,== 和 .equals() 都返回 true。对于 'ü' 只有 .equals() 有效。我真的很想知道为什么 equals 有效而 == 无效?
【问题讨论】:
-
我认为这与Weird Integer boxing in Java的原因相同
-
这也是我的猜测。 'a' 是一个较小的整数(0x61),'ü' 是一个较大的整数(0xfc)。
-
是的,这很奇怪。用另一个字符替换 ü,例如“a”,按预期工作。有趣...
标签: java char character equals