写在前面:
视频是什么东西,有看文档精彩吗?
视频是什么东西,有看文档速度快吗?
视频是什么东西,有看文档效率高吗?
1. 介绍
诸小亮:来说说 Object 类——所有类的父类
张小飞:这是什么意思?
“Object是一个JDK中的一个类,它是所有类的父类,里面定义了所有对象都具备的功能”
“这个,能否说的再次详细一些?”
比如:
“上图中的Animal,虽然没有指明父类,但其实父类就是Object”
“空口无凭,得证明一下吧”
“这简单,看下面代码:”
public static void main(String[] args){
Animal a = new Animal();
//使用 instanceof 可以判断是不是对应类型
if(a instanceof Object){
System.out.println("Animal是Object的子类。。。。");
}
}
结果:
“原来如此”
2. 常用方法
张小飞:师兄,您刚才说Object类中,定义了所有对象都具备的功能,具体有哪些呢?
诸小亮:有很多,但目前我们只学些两个:equals 和 toString
1. equals
“equals:用来判断两个对象是否相同 ,这是它的源码:”
张小飞:两个对象之间用 == ,比较的是它们的内存地址吗?
诸小亮:是的,看下面代码
class People{
int idCard;//身份证号
}
public class Demo{
public static void main(String[] args){
People p1 = new People();
p1.idCard=410184;
People p2 = new People();
p2.idCard=410184;
//equals:如果两个引用指向同一块儿内存就返回 true,否则返回 false
System.out.println(p1.equals(p2));
}
}
结果:
诸小亮:你是否明白为什么会输出 false ?
张小飞:因为 p1 和 p2 分别指向不同的内存地址,如下图:
诸小亮:不错,但生活中,我们常常认为身份证号一样就是同一个人,上面的结果是不是。。。。。
张小飞:我也注意到了,它们只是内存地址不同,但是里面的内容却是一模一样
诸小亮:这时,可以通过复写equals方法,比较对象中的内容,达到我们想要的效果,比如:
class People{
int idCard;//身份证号
//复写equals方法,内部比较对象的属性,属性相同就认为两个对象一样
public boolean equals(People p){
return this.idCard == p.idCard;
}
}
再次运行:
总结一下:
如果是基本变量,就用 ==(等值比较)
如果是对象,复写 equals 方法,比较对象内部的属性是否一样
2. toString
诸小亮:接着,看 toString 方法
作用:返回对象的字符串形式,java中建议 Object 的所有子类都复写这个方法
张小飞:为什么要复写这个方法?
诸小亮:因为默认的返回值不够清晰,比如:
结果:
张小飞:这不是还没调用 toString 方法的吗?
诸小亮:其实在 println方法内部,已经自动调用toString()方法,比如:
张小飞:原来如此,复写 toString 方法后确实会更清晰
public String toString(){
//复写后的结果,更加简明易懂
return "People[age=" + this.age + "]";
}
结果: