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方法的情况下,他们之间的比较还是内存中的存放位置的地址值,跟双等号(==)的结果相同;如果被重写,按照重写的要求来。

posted @ 2019-07-21 16:58  伊万夫斯基  阅读(2011)  评论(0编辑  收藏  举报