Object类toString()和equals()方法使用解析
作者:遍唱阳春 发布时间:2022-10-28 08:48:43
标签:Object,toString,equals,方法
我们知道,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


猜你喜欢
- Runtime.getRuntime().exec 路径包含空格1. 现象java代码通过Runtime.getRuntime().exec
- 11.可以使用抽象函数重写基类中的虚函数吗? 答: 可以 需使用 new 修饰符显式声明,表示隐藏了基类中该函数的实现
- PDF是一种在我们日常工作学习中最常用到的文档格式之一,但常常也会因为文档的不易编辑的特点,在遇到需要编辑PDF文档内容或者转换文件格式的情
- 1.情景展示java发送get请求、post请求(form表单、json数据)至另一服务器;可设置HTTP请求头部信息,可以接收服务器返回c
- 在Java中创建一个线程有两种方法:继承Thread类和实现Runnable接口。下面通过两个例子来分析两者的区别:1)继承Thread类p
- 在项目迁移到Spring Boot之后,发生内存使用量过高的问题。本文介绍了整个排查过程以及使用到的工具,也非常适用于其他堆外内存排查。背景
- 事务挂起和事务恢复源码解读在学习spring事务的时候,一定会涉及到一个概念,无法避免的,就是事务挂起和事务恢复对于事务挂起和事务恢复,可以
- 基于SMTP发送一个简单的邮件首先,需要一个认证器:package No001_基于SMTP的文本邮件;import javax.mail.
- 序列化和反序列化的概念当我们在Java中创建对象的时候,对象会一直存在,直到程序终止时。但有时候可能存在一种"持久化"场
- servlet、filter、listener、interceptor之间的区别和联系一、概念1.servlet:servlet是一种运行服
- 本文给大家分享Android里应用版本更新功能这一块的实现。一个好的应用软件都是需要好的维护,从初出版本到最后精品,这个过程需要版本不停的更
- 1、确定本地网络是通的:2、确定SpringBootq启动后是不报错的3、查看是不是自己在配置文件中加入了项目路径:如果加入了项目路径的话,
- 在Android系统中提供了多种存储技术.通过这些存储技术可以将数据存储在各种存储介质上.比如sharedpreferences可以将数据保
- 一般使用过UCWEB-Android版的人都应该对其特殊的menu有一定的印象,把menu做成Tab-Menu(支持分页的Menu),可以容
- @SpringBootApplication的使用1. Spring Boot 的核心1.1. 入口类和 @SpringBootApplic
- 前言今天的文章从下面这张图片开始,这张图片Java开发们应该很熟悉了我们都知道无锁状态是对象头是有位置存储hashcode的,而变为偏向锁状
- 实例如下:MemoryMXBean memorymbean = ManagementFactory.getMemoryMXBean(); &
- 自定义 webflux 容器配置配置代码@Componentpublic class ContainerConfig extends Rea
- 本文实例为大家分享了android音乐播放器的具体代码,供大家参考,具体内容如下话不多说先上效果前言写这个音乐播放器实在是迫不得已。因为我们
- 本文实例为大家分享了C#实现上传下载图片的具体代码,供大家参考,具体内容如下1.首先我们通过流来上传下载图片,所有操作只停留在流这一层Mem