【问题标题】:Java Character Equality on Special Character特殊字符上的 Java 字符相等
【发布时间】: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


【解决方案1】:

我对此行为的回答是== 执行参考比较。

尝试在该行设置断点

if(charset[i] == (mustContain.get(j))

通过检查charset[i]mustContain.get(j),您会发现引用对于特殊字符的大小写是不同的,结果为:false。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 2012-02-29
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    相关资源
    最近更新 更多