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").
Object类的toString()和equals()方法的更多相关文章
- 1.9(java学习笔记)object类及toString()与equals()方法
object类 java中objec是所有类公共的父类,一个类只要没有明显的继承某一类,那么它就是继承object类. 例如 class Person {......};和class Person e ...
- Object类的toString和Equals方法,以及Objects类的Equals方法
Object类 toString()方法 public class Person { private String name; private int age; public Person() { } ...
- java继承,final,super,Object类,toString,equals,
Java中的内部类:成员内部类静态内部类方法内部类匿名内部类 内部类的主要作用如下: 1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类 2. 内部类的方法可 ...
- Object类的toString()方法总结
1.java语言很多地方会默认调用对象的toString方法. 注:如果不重写toString方法,将会 使用Object的toString方法,其逻辑为 类名@散列码,toString方法是非常有 ...
- Java基础知识强化27:Object类之toString()方法
1. Object类的toString()方法: public String toString():返回该对象的字符串表示 2. 案例演示: (1)Student类: package cn.itc ...
- Java中的Object类的toString()方法,equals()方法
Object类是所有类的父类,若没有明确使用extends关键字明确表示该类继承哪个类,那么它就默认继承Object类,也就可以使用Object中的方法: 1.toString 如果输出一个对象的时候 ...
- Object类和包装类的一些方法
一.instanceof关键字的使用: a instanceof A:判断对象a是否是类A的实例.如果是,返回true:如果不是,返回false. 使用场景:为了避免在向下转型时出现ClassCast ...
- 【代码笔记】Java常识性基础补充(三)——Java的API及Object类、正则表达式、getTime()方法、DateFormat类、Calendar类
1.0 Java 的API(API: Application(应用) Programming(程序) Interface(接口)) 2.0 Java API就是JDK中提供给我们使用的类,这些类将底层 ...
- Object类中的五种方法
clone() Object类源码:protected native Object clone() throws CloneNotSupportedException; 这里有个问题:为什么Sun公司 ...
随机推荐
- [Gamma阶段]第八次Scrum Meeting
Scrum Meeting博客目录 [Gamma阶段]第八次Scrum Meeting 基本信息 名称 时间 地点 时长 第八次Scrum Meeting 19/06/04 大运村寝室6楼 40min ...
- Nginx发布静态图片服务器
vir-hosts.conf内容 server { listen ; server_name _; location ~ .*\.(gif|jpg|jpeg|png)$ { expires 24h; ...
- PHP系列 | PDO::prepare(): send of 68 bytes failed with errno=32 Broken pipe
设计场景 1.开启Redis的键空间过期事件(键过期发布任务),创建订单创建一个过期的key,按照订单号为key,设置过期时间. 2.通过Redis的订阅模式(持久阻塞),获取到订单号进行组装. 3. ...
- nginx https 转发
add_header Content-Security-Policy upgrade-insecure-requests;
- DOS批处理中%~dp0表示什么意思
https://www.jianshu.com/p/5a1a882ead95 https://www.cnblogs.com/cnpirate/p/5282324.html https://www.c ...
- 关于Oracle to_date函数的高级用法
由于种种原因,在我们的系统中,账套期间(PERIOD_NAME)由于格式设置的原因,数据库层存储的格式如下 Mar-19,而不是常规的2019-03. 我们无法更改数据库,涉及到的点太多. 但是期间数 ...
- 2019年计算机技术与软件专业技术资格(水平)考试安排v
根据<关于2019年度专业技术人员资格考试计划及有关问题的通知>(人社厅发[2018]142号)要求,2019年度计算机技术与软件专业技术资格(水平)考试(以下简称计算机软件资格考试)安排 ...
- WebGL学习笔记(十五):模板缓冲
可以用来干啥? 模板缓冲一般用来实现一些地面反射投影和类似镜子的特殊效果,如下: 开启模板缓冲 默认情况下,模板缓冲是关闭的,模板缓冲如果处于关闭状态,运行模板相关的代码不会报错,但是不会出现预期的效 ...
- 解决catalina.out文件过大的问题
有用Tomcat的人,绝对都会遇到这样一个问题:catalina.out文件过大. 它是Tomcat默认生成的日志文件,会随着时间的推移,逐渐增大,不断的增长,甚至达到几G,几十G的大小.由于文件过大 ...
- PHP 1000个进程同时利用file_put_contents的追加FILE_APPEND模式
1000个进程同时利用file_put_contents的追加FILE_APPEND模式,不会出现写入的数据被覆盖? <?php // fork出1000个进程查询,内存大,cpu屌,1000个 ...