== 和 equals 的区别是什么?

分享一道简单的面试题,== 和 equals 的区别,这道题常见比较简单,但是有很多人确实回答的不太全面,这里我给大家分享一下如何具体的回答这个问题。


一、对象类型不同

1、equals():是超类Object中的方法。

2、==:是操作符。

二、比较的对象不同

1、equals():用来检测两个对象是否相等,即两个对象的内容是否相等。

2、==:用于比较引用和比较基本数据类型时具有不同的功能,具体如下:

(1)、基础数据类型:比较的是他们的值是否相等,比如两个int类型的变量,比较的是变量的值是否一样。

(2)、引用数据类型:比较的是引用的地址是否相同,比如说新建了两个User对象,比较的是两个User的地址是否一样。

三、运行速度不同

1、equals():没有==运行速度快。

2、==:运行速度比equals()快,因为==只是比较引用。

扩展资料:
equals()和==的源码定义:

public boolean equals(Object obj) {

    return (this == obj);

}


由equals的源码可以看出这里定义的equals与==是等效的(Object类中的equals没什么区别),不同的原因就在于有些类(像String、Integer等类)对equals进行了重写。

但是没有对equals进行重写的类就只能从Object类中继承equals方法,其equals方法与==就也是等效的,除非在此类中重写equals。

总结

面试时候从三个方面进行回答,对象类型不同,比较的对象不同和运行速度不同,这样可以给面试官留下好的运行,虽然看起来貌似比较简单,但是你这样回答显的非常专业和你的知识面水平比较广

上一篇:Equals() 和运算符 == 的重写准则(C# 编程指南)


下一篇:JAVA中的集合