String中的"=="和"equals()"方法

 

运行结果:

 

 

 第一种方式,"a"存放在方法区的字符串常量池中,a存放的是a的地址,在栈中。

 第二种方式,"a"存放在堆空间中,a1存的是a的地址,在栈中。

 

"=="比较的是地址值,如果" String b="a" ",那么"a==b"为true,常量池中不能存放相同的值。a1和a的"a"存放的位置不同,所以"=="返回的是false。

"equals"比较的是字符序列,也就是char型数组的值,两个存的都是"a",所以返回true。

 

String的equals方法如下:

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String aString = (String)anObject;
            if (coder() == aString.coder()) {
                return isLatin1() ? StringLatin1.equals(value, aString.value)
                                  : StringUTF16.equals(value, aString.value);
            }
        }
        return false;
    }

 

posted @ 2020-09-08 10:55  xsyz  阅读(275)  评论(0编辑  收藏  举报