Java 特殊字符的字符相等
Java Character Equality on Special Character
我试图获得 'ü' == 'ü' 的相等性。如果我这样写(在 sout 中),这 returns 为真。但是在我的代码中:
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() returns 都是正确的。对于 'ü' 只有 .equals() 有效。我真的很想知道为什么 equals 有效而 == 无效?
我对此行为的回答是 ==
执行引用比较。
尝试在该行设置断点
if(charset[i] == (mustContain.get(j))
通过检查 charset[i]
和 mustContain.get(j)
你会发现引用对于特殊字符的大小写是不同的,这给出了结果:false。
我试图获得 'ü' == 'ü' 的相等性。如果我这样写(在 sout 中),这 returns 为真。但是在我的代码中:
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() returns 都是正确的。对于 'ü' 只有 .equals() 有效。我真的很想知道为什么 equals 有效而 == 无效?
我对此行为的回答是 ==
执行引用比较。
尝试在该行设置断点
if(charset[i] == (mustContain.get(j))
通过检查 charset[i]
和 mustContain.get(j)
你会发现引用对于特殊字符的大小写是不同的,这给出了结果:false。