Object类toString()和equals()方法使用解析
作者:遍唱阳春 时间:2022-10-28 08:48:43
我们知道,Object类是所有类的父类,因此也被称为根类、祖先。那么,我们就来看一看Object类的最常用的两个方法是如何用的。
1.toString方法:
Object类的toString()方法默认返回的是对象地址值,如果某个类的toString()方法返回的不是对象地址值,则说明这个类重写了toString()方法。
public class Test5 {
public static void main(String[] args) {
Person p1=new Person();
System.out.println(p1.toString());
//没有重写toString()方法,返回的是对象的地址值 cn.itcast.Person@3feba861
}
}
接下来我们重写Person的toString()方法
public class Person {
private String name;
private int age;
//重写toString()方法
@Override
public String toString() {
return "姓名: "+name+" 年龄:"+age;
}
public Person(){
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
再来看看toString()方法返回的值:
public class Test5 {
public static void main(String[] args) {
Person p1=new Person();
System.out.println(p1.toString());
//重写了toString()方法,返回的是方法的返回值
Person p2=new Person("aaa",18);
System.out.println(p2.toString());
// 姓名: null 年龄:0
// 姓名: aaa 年龄:18
}
}
2.equals方法:
equals()方法的源码如下所示:
public boolean equali(Object obj){
return this==obj;
}
因为 == 比较的是对象的地址值,所以Object类的equals()默认比较的是地址值,需要重写才有意义。具体如何重写,就看我们比较两个对象是否相同的依据是什么了。
举个例子:我们规定,如果两个人的姓名和年龄都一样,那么两个人相同。
//重写Person类的equals()方法
@Override
public boolean equals(Object obj) {
return this.name==((Person)obj).name&&this.age==((Person)obj).age;
}
再来测试一下equals()方法:
public class Test5 {
public static void main(String[] args) {
Person p3=new Person("aa",21);
Person p4=new Person("aa",23);
Person p5=new Person("bb",21);
Person p6=new Person("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").
来源:https://www.cnblogs.com/iceywu/p/12015118.html
标签:Object,toString,equals,方法
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java中二叉树数据结构的实现示例
2023-08-07 03:10:58
J2EE Servlet上传文件到服务器并相应显示功能的实现代码
2023-12-05 16:36:14
![](https://img.aspxhome.com/file/2023/9/96049_0s.png)
Android 中通过实现线程更新Progressdialog (对话进度条)
2023-04-16 14:57:50
![](https://img.aspxhome.com/file/2023/4/95004_0s.gif)
C#泛型概念的简介与泛型的使用
2023-10-12 05:13:02
![](https://img.aspxhome.com/file/2023/2/96432_0s.png)
SpringBoot自定义Starter实现流程详解
2022-05-19 07:03:25
![](https://img.aspxhome.com/file/2023/1/66071_0s.png)
android编程实现sd卡读取数据库的方法
2021-10-03 12:26:31
java实现字符串反转案例
2021-11-20 04:45:55
Spring Boot整合Swagger测试api构建全纪录
2022-10-21 09:05:25
C#集合本质之队列的用法详解
2023-03-17 06:42:38
![](https://img.aspxhome.com/file/2023/8/100088_0s.png)
Android开发中MJRefresh自定义刷新动画效果
2023-11-27 06:04:20
![](https://img.aspxhome.com/file/2023/0/117120_0s.png)
C#简单实现防止多个程序运行的方法
2021-07-31 04:36:27
Maven插件的安装及使用
2022-04-05 04:38:30
![](https://img.aspxhome.com/file/2023/5/64155_0s.jpg)
简单介绍java中equals以及==的用法
2023-01-28 07:47:41
![](https://img.aspxhome.com/file/2023/5/93145_0s.png)
Spring中XML schema扩展机制的深入讲解
2022-06-29 07:44:15
![](https://img.aspxhome.com/file/2023/4/77384_0s.png)
c#实现将pdf转文本的示例分享
2023-07-19 14:54:23
基于java查找并打印输出字符串中字符出现次数
2022-07-28 19:45:47
详解Java中的三种流程控制语句
2023-11-04 17:06:34
![](https://img.aspxhome.com/file/2023/2/58852_0s.png)
java8 stream的多字段排序实现(踩坑)
2023-10-22 11:06:31
![](https://img.aspxhome.com/file/2023/5/83085_0s.jpg)
在Java内存模型中测试并发程序代码
2023-11-24 20:37:55
![](https://img.aspxhome.com/file/2023/7/59967_0s.png)
详解Java8 CompletableFuture的并行处理用法
2023-07-27 11:48:06
![](https://img.aspxhome.com/file/2023/8/77388_0s.png)