equals和== 的区别是什么
在面试时,问基础问题时,80%的机率会问到equals和== 的区别是什么,
当看到这样题的时候大家肯定觉的是送分题,既然送分题,那么你要回答出点不一样东西才行:正式进入面试环节(声音)
答:您好,我是来面试的
面:好,那咱们开始。equals和== 的区别是什么
答:equals是比较两个对象的值是否相同,==是运算操作符,比较两个基本数据类型的值是否相等,如果比较两个对象,那么比较的是两个对象的地址。
面:如果你是这样回答面试官的话,虽然回答的没毛病,但是太肤浅,那正确的打开方式应该是什么呢?
一、对象类型不同
equals():是超类Object中的方法。
== :是操作符
二、 比较的对象不同
equals():用来检测俩个对象是否相等,即俩个对象的内容是否相等。
== :用与比较引用和比较基本数据类型时具有不同的功能,具体如下:
(1)、基础数据类型:比较的他们的值是否相等,比如咱们常用int的变量,比较的是变量的值是否一样。
(2)、引用数据类型:比较的是引用的地址是否相同,比如说新建了俩个对象,比较的是俩个对象的地址是否一样。
三、 运行速度不同
equals():没有==运行速度快。
== :运行速度比equals()快,因为==只是比较引用
面:回答到这里你已经比很多强了,但是我们其实没有回答根源,所谓根源是什么,就是你依据在哪里,那么我们可以在扩展点,说一说equals()跟==源码jdk中定义,我们可以看到,由equals的源码可以看出这里定义的equals与==其实是等效的,(object类中的equals() 跟==没有什么区别),真的大厂面试需要回答这部分东西,不同原因就在于有些类像Stirng、Integer等类对equals进行了重写,但是没有对equals进行重写的类就只能从Object类中继承equals方法,其实equals方法跟==是等效的
如果你还想回答更好的,那么你可以说在工作中equals需要注意:
自反性,对称性,传递性,一致性,非空性。
而==需要知道是:
比较操作符俩边是否同一个对象
俩边操作必须是同一类型(可以父子类之间)才能编译通过
好了,我敢肯定没有在比你回答的完美的了。
public class test1 {
public static void main(String[] args) {
String a = new String("ab"); // a 为一个引用
String b = new String("ab"); // b为另一个引用,对象的内容一样
String aa = "ab"; // 放在常量池中
String bb = "ab"; // 从常量池中查找
if (aa == bb) // true
System.out.println("aa==bb");
if (a == b) // false,非同一对象
System.out.println("a==b");
if (a.equals(b)) // true
System.out.println("aEQb");
if (42 == 42.0) { // true
System.out.println("true");
}
}
}
例如String类对equals的重写
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
三、其他注意提醒项
1、==比较时,两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过
2、对任意引用值X,x.equals(x)的返回值一定为true
3、任何非空的引用值X,x.equals(null)的返回值一定为false 。
更多关于“Java培训”的问题,欢迎咨询千锋教育在线名师。千锋已有十余年的培训经验,课程大纲更科学更专业,有针对零基础的就业班,有针对想提升技术的好程序员班,高品质课程助理你实现java程序员梦想。
猜你喜欢LIKE
相关推荐HOT
更多>>java两个日期比较相差多少天
在Java中,可以使用`java.time`包下的类来比较两个日期之间相差的天数。以下是一个示例代码:importjava.time.LocalDate;importjava.time.tempo...详情>>
2023-06-27 17:19:00find命令查找文件
"find"命令是在Unix、Linux和类似系统中使用的一个非常强大的命令,用于在文件系统中查找文件和目录。它可以根据各种条件进行搜索,并提供了灵...详情>>
2023-06-16 14:00:30如何添加Java环境变量
要添加Java环境变量,请按照以下步骤进行操作:1.打开计算机的控制面板。2.点击"系统和安全"(Windows10及更高版本)或"系统"(Windows7和较早版本...详情>>
2023-06-08 09:31:10随机函数rand怎么使用
rand是一个C++的函数,用于产生一个随机数。以下是使用rand的方法:1.头文件:需要包含stdlib.h或cstdlib头文件以使用rand函数。2.使用rand()函...详情>>
2023-04-20 15:47:10什么是面向对象编程?面向对象有什么特性
面向对象编程(Object-Oriented Programming,OOP)是一种常用的编程范式,它将数据和操作数据的方法组合成一个单独的实体,称为“对象”,并且对...详情>>
2023-03-17 15:30:11Java培训问答更多>>
新Java行业疑惑解答:Java的内存管理是如何工作的?
新java script是什么?为什么要学java script
新java和大数据哪个好?未来哪个职业发展更好
新java培训班多久能学会?培训周期大概多久
新java script和java的区别有哪些?如何区分
新java script的数据类型主要有哪些?怎样学的更快
新c语言与java区别在哪里?去培训机构学哪个比较好
Java面试题库 更多>>
华为外包java面试题-Java实现单链表的逆序
Java程序员面试题
Java面试题及答案
什么是线程的上下文切换?
如何撤销已经推送(push)到远端仓库的提交(commit)信息?
你了解哪些加密算法?
- 北京校区
- 大连校区
- 广州校区
- 成都校区
- 杭州校区
- 长沙校区
- 合肥校区
- 南京校区
- 上海校区
- 深圳校区
- 武汉校区
- 郑州校区
- 西安校区
- 青岛校区
- 重庆校区
- 太原校区
- 沈阳校区
- 南昌校区
- 哈尔滨校区