[英]Java Character Equality on Special Character
我試圖獲得 'ü' == 'ü' 的相等性。 如果我這樣寫(在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 有效而 == 無效?
我對這種行為的回答是==
執行引用比較。
嘗試在該行設置斷點
if(charset[i] == (mustContain.get(j))
通過檢查charset[i]
和mustContain.get(j)
您將看到對於特殊字符的情況,引用是不同的,這給出了結果:false。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.