Object类toString()和equals()方法使用解析
我们知道,Object类是所有类的父类,因此也被称为根类、祖先。那么,我们就来看一看Object类的最常用的两个方法是如何用的。
1.toString方法:
Object类的toString()方法默认返回的是对象地址值,如果某个类的toString()方法返回的不是对象地址值,则说明这个类重写了toString()方法。
publicclassTest5{
publicstaticvoidmain(String[]args){
Personp1=newPerson();
System.out.println(p1.toString());
//没有重写toString()方法,返回的是对象的地址值cn.itcast.Person@3feba861
}
}
接下来我们重写Person的toString()方法
publicclassPerson{
privateStringname;
privateintage;
//重写toString()方法
@Override
publicStringtoString(){
return"姓名:"+name+"年龄:"+age;
}
publicPerson(){
}
publicPerson(Stringname,intage){
this.name=name;
this.age=age;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
}
再来看看toString()方法返回的值:
publicclassTest5{
publicstaticvoidmain(String[]args){
Personp1=newPerson();
System.out.println(p1.toString());
//重写了toString()方法,返回的是方法的返回值
Personp2=newPerson("aaa",18);
System.out.println(p2.toString());
//姓名:null年龄:0
//姓名:aaa年龄:18
}
}
2.equals方法:
equals()方法的源码如下所示:
publicbooleanequali(Objectobj){
returnthis==obj;
}
因为==比较的是对象的地址值,所以Object类的equals()默认比较的是地址值,需要重写才有意义。具体如何重写,就看我们比较两个对象是否相同的依据是什么了。
举个例子:我们规定,如果两个人的姓名和年龄都一样,那么两个人相同。
//重写Person类的equals()方法
@Override
publicbooleanequals(Objectobj){
returnthis.name==((Person)obj).name&&this.age==((Person)obj).age;
}
再来测试一下equals()方法:
publicclassTest5{
publicstaticvoidmain(String[]args){
Personp3=newPerson("aa",21);
Personp4=newPerson("aa",23);
Personp5=newPerson("bb",21);
Personp6=newPerson("aa",21);
System.out.println(p3.equals(p4));//false
System.out.println(p3.equals(p5));//false
System.out.println(p3.equals(p6));//true
}
}
equals()方法的注意事项:
(1)除了用a.equals(b)这个写法之外,也可以用Objects.equals(a,b),作用是一样的。
(2)equals方法空指针安全,即容忍空指针。即equals()方法中的参数可以有null,返回值永远为false。
(3)null不可以调用方法,所以若a为空,则不能调用a.equals()方法,否则会出现NullPointERException.正因为如此,我们一般将常量或已知非空的对象放在前面,即写成"aa".equals(str)而不是str.equals("aa").
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。