Java中equals和==

相信大家经常遇见字符串用equlas和==比较,判读输出为真假。

    其实只要你搞懂了,这种题so easy!!!

    我们先来看一看一个例子

public class day01_6 {
    public static void main(String[] args) {
        String str1 = new String("111");
        String str2 = "111";
        System.out.println(str1==str2);
        System.out.println(str1.equals(str2));
    }
}

    相信都知道答案吧,那就是false和true。为什么呢

    首先==是用来比较值的。而str1和str2的值又是什么呢,那就是地址值

    很明显str1指向堆,str2指向方法区,地址不同,所以返回false

    那么equals比较的是什么呢,我们看看Object里面是怎么定义的吧

public boolean equals(Object obj) {
    return (this == obj);
}

    阿偶,他们比较的也是地址值。

    所以说,在不重写类的equlas的情况下,他们比较的都是地址值。

    而String类重写了equlas方法,让其比较的是字符串的内容,很明显,两个字符串都是111,所以相等。

结论就是:

    1、使用==比较时,如果是基本数据类型,则比较他们的值的大小,而对于引用类型,他们比较的是它们的地址值

    2、使用equals比较时,只能比较引用类型,如果类没有重写equals方法,那么比较的是他们的地址值,若重写了equals方法,则根据equals方法定义的去比较。

猜你喜欢

转载自blog.csdn.net/yanghan1222/article/details/80160148