java 基础之 equals 和 == 的区别

简单看个例子

public class compare {

    int a;

    public compare(int a) {
        this.a=a;
    }
    
    public static void main(String[] args) {
        int x = 0;
        int y = 0;

        compare com=new compare(1);
        compare com1=new compare(1);

        if (x == y) {
            System.out.println("xy相等");
        } else
        {
            System.out.println("xy不相等");
        }


        System.out.println("com,com1用==比较");
        if (com == com1) {
            System.out.println("com,com1相等");
        } else
        {
            System.out.println("com,com1不相等");
        }

        System.out.println("com,com1用equels比较");
        if (com.equals(com1)) {
            System.out.println("com,com1相等");
        } else
        {
            System.out.println("com,com1不相等");
        }
    }
}

运行结果:

==比较的是引用指向的地址是否相等,可以简单理解为比较地址

x和y这两个引用都指向存放0这个数字的内存的地址,所以相等

我们经常会理解equals是用来比较内容的,通常情况下是正确的,比如说String类两个new出来的实例内容相同的话用equals比较那么就是相等的,那为什么例中com1和com的内容相等用equals比较却是不相等呢??

我们看下equals的源码:

通过源码我们可以看到居然还是用==来判断是否相等!!

那String类的equals方法又是怎么回事??不急我们看下String类的equals方法源码:

原来这两个equals方法实现不一样!!

到这里相信大家都明白了,String类之所以可以用equals方法比较内容,那是因为String 类重写了Object类的equals方法!

而所有的类都是基于Object类的

所以呢,我们如果要比较com和com1的内容就要重写Object类的equals方法:

    @Override
    public boolean equals(Object obj) {
        if(obj instanceof compare)
        {
            compare com=(compare)obj;
            if(a==com.a)
            {
                return true;
            }
        }
        return false;
    }

运行结果:

猜你喜欢

转载自blog.csdn.net/qq_35464253/article/details/81149180