在Java语言里 ==和equals的区别

来源:互联网 发布:便宜已备案域名出售 编辑:程序博客网 时间:2024/04/19 11:59


       虽然我还没有踏入职场,但是学习Java以来做了很多的学习笔记,在我所看的各种书籍中对这个问题的回答可谓是各有不同,但是我个人感觉它们说的不是很全面,所以自己结合笔记又总结了一点,如果有不周到的地方,还请各位指教一下;

       现在很多人会说==和equals方法的不同之处是:==比较的是两个对象的内存地址,而equals比较的是两个对象的内容是否相同,当然这是相当的片面的,好一点的书籍里面对这两个比较方法的说明大多是:equals 方法(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相等。 ==用于比较引用和比较基本数据类型时具有不同的功能:比较基本数据类型,如果两个值相同,则结果为true,而在比较引用时,如果引用指向内存中的同一对象,结果为true。这样的说明本身来说是可行的,但是可能说的简洁了一点,有一些特殊的情况还是需要加以说明的。

        我要补充的一点就是对与自定义类型的相等比较应该如何说明,API里的类大部分都重写了equals方法,没有重写的一般是自己写的类,如果是你自己定义的一个类,比较自定义类用equals和==是一样的,都是比较句柄地址,因为自定义的类是继承于object,而object中的equals就是用==来实现的,你可以看源码。

       所以在面试的时候在上面的基础上最好加上自定义类型的情况:对于Object类来说,equals方法相当于 == ;即判断的是两个对象的地址是不是相同;对于继承了Object类的子类来说,只有重写了父类的equals方法的类才是判断两个对象的内容!

      我想总结了上面良种的回答,才算是最完整圆满的。最后,希望大家面试顺利,找到自己心仪的工作。