Object类
1.1 java.lang.Object类特点
- Object是类层次结构的根(最顶层)类
- Object是所有类的父类,
- 所有对象(包括数组)都实现这个类
如果一个类没有继承父类,默认继承的父类是Object
1.2 toString方法
String toString() : 返回该对象的字符串表示
直接打印类的名字,其实就是调用对象的toString()方法
一个类直接调用Object的toString()方法,会打印出地址值,但意义不大
需要重写Object的toString()方法,打印对象的属性
1.3 equals方法
boolean equals(Object obj) 指某个对象是否与此对象相等
Object类equals方法源码:
public boolean equals(Object obj) {
return (this == obj);
}
参数
Object 传递任何对象
方法体
==:比较运算符 返回的是布尔值 true | false
基础数据类型:比较的是值
引用数据类型:比较的是对象的地址值
this:那个对象调用的方法,就代表那个对象
obj: 传递过来的参数
Obecjts类的equals()
String a = null;
String b = "aaa";
System.out.println(a.equals(b));
如果对象为空的话,会出现空指针异常 NullPointerException (null是不能调用方法的)
使用Objeacts的equals方法
两个对象比较,防止空指针异常
String a = null;
String b = "aaa";
boolean e = Objects.equals(a,b);
System.out.println(e);
源码:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
重写equals方法
需要比较的是对象属性值,而不是地址,所以要重写equals方法
问题:隐含着一个多态 弊端:无法使用子类特有内容 可以使用向下转型
@Override
public boolean equals(Object obj) {
//如果obj是this本身 直接返回true
if(obj==this){
return true;
}
//obj如果是null 直接返回false
if(obj == null){
return false;
}
//判断类型 防止类型异常
if(obj instanceof Person){
//使用向下转型 把obj类型转为Person
Person p = (Person)obj;
//比较两个对象的属性
boolean b = this.name.equals(p.name) && this.age==p.age;
return b;
}
return false;
}