一、开篇故事 ——一分钟读懂equals与==的区别
有一对双胞胎长得一模一样,就算大家来找茬也找不出外形的区别。哥哥暂且叫GG,弟弟叫DD。
“GG和DD长得真像啊,就像一个模子刻出来的,所以GG和DD长得一样。”
用JAVA的语句描述是:return GG.equals(DD);结果是true。
“虽然长得一样但毕竟是两个人啊,GG是哥哥,DD是弟弟,活生生的两个人不能因为长得一样而变成一个人!”
用JAVA的语句描述是:return GG==DD;结果是false。
GG只是哥哥的小名,他的真名叫做狗子,接下来有两个问题:
GG和狗子长得一样吗?
GG是狗子吗?
很明显GG和狗子当然长得一样啊因为都是哥哥嘛,所以用JAVA的语句描述是:return GG.equals(狗子);结果是true。
那GG是狗子吗,当然啦,GG和狗子是你中有我我中有你都代表同一个人,也就是哥哥,所以用JAVA的语句描述是:return GG==狗子;结果是true。
二、正经描述
- ==是一个操作符,操作符大多是和变量的引用打交道,使用==时要深入到内存中看本质。==比较的内存地址或者数值;
- equals方法是用来比较两个对象实体object的,在Java中往往是根据开发者的不同需求而又不同的实现方式(或者说是不同的比较方法)。java中默认的equals方法是返回一个==的比较的:
public boolean equals(Object obj) {
return (this == obj);
}
三、写在最后
其实equals怎么比较的不重要,一千个人有一千种比较方式,但一定要明白equals方法存在的目的。