开发者社区> 问答> 正文

关于Object中的equals方法和String中的equals方法的疑惑?

首先是这段代码:
screenshot
输出结果是:s1 != s2 和 s1 equals s2; 这个我可以理解,使用new操作符后,在堆内存中又新开辟了一块空间,s1和s2在堆内存中的值相同,但是引用的地址不同。但是在博客园的这篇文章看到下面这段代码:
screenshot
输出: obj1 != obj2 obj1 not equals obj2
昨天晚上看了那篇文章的评论,把我自己的理解写出来,但是还是不是很清楚,我大意是这样的:
java当中所有类都继承自Object这个基类,在Object中的定义了一个equals方法,这个方法的初始化行为是比较对象的内存地址值(Object的equals方法使用==比较的),但在一些类库中这个方法被覆盖掉了,比如String, Interger, Date这些类中equals有其自己的实现方法,String类继承自Object类,也继承了equals方法,但是重写了该方法,不再比较类在堆内存中的存放地址了,而是比较存在堆中的值。 ???
这个解释不知道对不对,望指教,还有,关于obj1 not equals obj2你们是怎么看的??

展开
收起
蛮大人123 2016-02-26 18:01:55 2652 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    == 比较就不用说了,任何情况下都是比较内存地址。
    equals比较,是一个方法调用,默认的实现(Object类)是使用了==:
    public boolean equals(Object obj) {

    return (this == obj);

    }
    第一段代码:
    比较的是String对象,而String类覆写了equals()方法,比较的是字符串内容,所以输出了s1 equals s2。
    这个你理解的没有问题!
    第二段代码:
    比较的是test对象,test类没有覆写equals()方法,所以还是默认比较内存地址,从而输出了obj1 not equals obj2。

    2019-07-17 18:48:35
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多