equal函数的用法,equals函数用法
首先,让我们来看看它们的区别:
(推荐学习:java入门)
equals()方法用于比较两个对象的内容是否相等。因为所有类都是从java.lang.Object类继承的,所以它适用于所有对象。如果没有覆盖这个方法,仍然调用object类中的方法,而object中的equals方法返回==的判断;
==比较变量(栈)内存中存储的对象的(堆)内存地址,用于判断两个对象的地址是否相同,即是否引用同一个对象。
equals()作用
equals()的作用是判断两个对象是否相等。
Equals()是在JDK的Object.java中定义的。通过判断两个对象的地址是否相等(即是否是同一个对象)来区分两个对象是否相等。源代码如下:
公共布尔等于(对象对象){
return(this==obj);
}由于equals()方法是在Object.java定义的,所以意味着所有的Java类都实现了equals()方法,所有的类都可以通过equals()比较两个对象是否相等。
但是,我们已经说过,使用默认的“equals()”方法等同于“==”方法。所以我们通常会重写equals()方法:如果两个对象的内容相等,equals()方法返回true;否则,返回fasle。
根据“类是否覆盖equals()方法”分为2类。
如果一个类没有重写equals()方法,那么当它通过equals()比较两个对象时,实际上是比较这两个对象是否是同一个对象。此时相当于用“==”来比较两个对象。
我们可以重写该类的equals()方法,让equals()以其他方式比较两个对象是否相等。通常的做法是:如果两个对象的内容相等,equals()方法返回true;否则,返回fasle。
下面,将举例说明上述两种情况:
1.equals()方法并未涵盖在内。
公共类EqualsTest {
公共静态void main(String[] args) {
//创建两个内容相同的新Person对象,
//再次将它们与equals进行比较。
用户user1=新用户( James ,100);
用户user2=新用户( James ,100);
System.out.printf(比较结果: user 1 . equals(user 2));
}
/**
* @desc用户类。
*/
静态类用户{
int age
字符串名称;
公共用户(字符串名称,整数){
this.name=name
this.age=年龄;
}
公共字符串toString() {
返回姓名-年龄;
}
}
}运行结果:
错误结果分析:
我们用user1.equals(user2)来“比较user1和user2是否相等”。实际上调用了Object.java的equals()方法,也就是调用了(user1==user2)。
就是比较p1和p2是不是同一个对象。根据用户1和用户2的定义,虽然内容相同;但它们是两个不同的对象,所以返回的结果是假的。
(视频教程推荐:java视频教程)
2.重写equals()方法。
修改上面的EqualsTest以覆盖equals()方法:
公共类EqualsTest {
公共静态void main(String[] args) {
//创建两个内容相同的新Person对象,
//再次将它们与equals进行比较。
用户user1=新用户( James ,100);
用户user2=新用户( James ,100);
System.out.printf(比较结果: user 1 . equals(user 2));
}
/**
* @desc用户类。
*/
静态类用户{
int age
字符串名称;
公共用户(字符串名称,整数){
this.name=name
this.age=年龄;
}
公共字符串toString() {
返回姓名-年龄;
}
@覆盖
公共布尔等于(对象对象){
如果(this==obj)
返回true
if (obj==null)
返回false
if (getClass()!=obj.getClass())
返回false
User other=(User)obj;
如果(年龄!=other.age)
返回false
if (name==null) {
if (other.name!=空)
返回false
} else if(!name.equals(其他. name))
返回false
返回true
}
}
}运行结果:
真分析:我们在EqualsTest.java中重写了User的equals()函数:当两个用户对象的名字和年龄相等时,返回真。因此,运行结果返回true。
== 的作用
"==":它的作用是判断两个对象的地址是否相等。也就是说,判断引用的对象是否是堆中的同一个对象,我们就知道所有的新对象都在堆中。对象的引用存储在堆栈中,特别是堆栈框架中。让我们看看下面的代码:
公共静态void main(String[] args) {
用户user1=新用户( James ,100);
用户user2=新用户( James ,100);
system . out . println( user 1 . equals(user 2): user 1 . equals(user 2));
system . out . println( user 1==user 2:(user 1==user 2));
}输出结果:
user1.equals(user2):true
1==user2: false指向堆中两个不同的区域,因此与==的比较返回false。以上是equals()函数和“==”是什么函数的详细说明,更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。