Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
特殊字符上的Java字符相等_Java_Char_Character_Equals - Fatal编程技术网

特殊字符上的Java字符相等

特殊字符上的Java字符相等,java,char,character,equals,Java,Char,Character,Equals,我试图得到‘ü’==‘ü’的等式。如果我这样写(sout),则返回true。但在我的代码中: static Character[] charset = {'ü'}; public static void main(String[] args) { ArrayList<Character> mustContain = new ArrayList<>(); mustContain.add('ü'); ArrayList

我试图得到‘ü’==‘ü’的等式。如果我这样写(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
added
[ü]
我只能使用字符集[I].equals(mustContain.get(j))


但是对于字符“a”,代码中的一切都正常,==和.equals()都返回true。仅适用于“ü”。equals()有效。我真想知道为什么equals有效而==无效?

我对这种行为的回答是
=
执行引用比较

试着在线路上设置一个断点

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

通过检查
charset[i]
mustContain.get(j)
您将看到,对于特殊字符的情况,引用是不同的,结果是:false。

a'是一个小整数(0x61),'u'更大(0xfc)。是的,这很奇怪。将ü替换为另一个字符,例如“a”,效果与预期一样。有趣的。。。
if(charset[i] == (mustContain.get(j))