java中==和equals的区别
本文非原创,参考链接 http://www.cnblogs.com/smyhvae/p/3929585.html
==
基本数据类型:比较的是值
引用数据类型:比较的是堆内存地址,他们在内存中的存放地址
注意:如果是同一个new出来的对象(在堆内存中是同一个区域),比较的结果为true,否则为false,因为每new一次,都会重新开辟堆内存空间
equals
不能用于基本数据类型比较,继承于Object这个超类,只有引用数据类型才有equals方法。
默认情况下比较的堆内存地址值,一般在一些类中该方法被重写,比较对象的成员变量值是否相同。
在Object类中定义了一个equals的方法,equals的源码是这样写的
public boolean equals(Object obj) {
return (this == obj);
}
可以看到,这个方法的初始默认行为是比较对象的内存地址值,一般来说,意义不大。所以,在一些类库当中这个方法被重写了,如String、Integer、Date。在这些类当中equals有其自身的实现(一般都是用来比较对象的成员变量值是否相同),而不再是比较类在堆内存中的存放地址了。
对于引用型变量进行equals比较,在没有重写equals方法的情况下,他们之间的比较还是内存中的存放位置的地址值,跟双等号(==)的结果相同;如果被重写,按照重写的要求来。
本文作者:benjieqiang
本文链接:https://www.cnblogs.com/benjieqiang/p/11221751.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步