Object 类的使用
1.java. lang.Object类
2.Object类是所有java类的根父类
3.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类
4.Object类中的功能(属性,方法)就具有通用性。
属性:无
java.lang.Object 是所有类的父类,也就是说java中所有的类都继承Object ,都可以使用Object类中的方法
- Object类中有12个方法,但是有一个是private修饰的私有方法,还有三个是重载的wait()方法,
- 所以实际上子类使用的只有9个方法。
方法:
-
boolean equals(Object obj)
指示其他某个对象是否与此对象“相等”。 -
String toString()
返回该对象的字符串表示。 -
Class<?> getClass()
返回此 Object 的运行时类。 -
int hashCode()
返回该对象的哈希码值。 -
protected Object clone()
创建并返回此对象的一个副本。 -
protected void finalize()
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 -
void wait()
在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待 -
void notify()
唤醒在此对象监视器上等待的单个线程。 -
void notifyAll()
唤醒在此对象监视器上等待的所有线程。
Object 类中的toString的使用
-
1.当我们输出一个对象的引用时,实际上即使调用当前对象的toString();
-
2.Object类中toString() 的定义:
public String toString(){
return getClass().getName() + “@” + Integer.toHexString(hashCode());
} -
3.像String ,Date,File .包装类等都重写了Object类中的toString()方法。使得在调用对象的toString() 方法时,返回"实体内容"信息
4.自定义类也可以重写toString ()方法,当调用此方法时,返回对象的“实体内容”
Object类中equals()方法
-
Object类中equals()方法和 == 的作用是相同的,比较两个对象的地址值是否相同,即两个引用是否指向同一个对象.
-
像String、 Date 、 File 、 包装类等,都重写了Object类中的equals()方法。重写以后比较的不是两个引用的地址值是否相同,而是比较两个对象的“实体内容”是否相同
-
通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的“实体内容”是否相同,
-
重写的原则:比较两个对象的实体内容是否相同
== 和 equals()的区别?
① == 既可以比较基本数据类型,也可以比较引用类型。
当两边的操作数是基本数据类型时,比较的是(值本身)内容。当两边的操作数时引用类型时,比较的是引用的地址值。
② equals()只能比较引用类型。Object 类中的equals()使用的是" == "(作用和==相同),比较的是引用类型的地址值,如果重写之后,按照重写时定义的规则进行比较,比较的是对象的内容
toString()
直接输出对象时,默认调用Object的toString()方法
展示对象的地址值,如果想要输出对象中的内容,可以重写从Object类中的继承来的toString(),展示了对象的属性值。
对象 instanceof 数据类型
判断左边对象是否是右边数据类型
@Override
public boolean equals(Object obj){
/*
* 比较传入的参数和当前对象的地址值是否相等
* 若相等直接返回true
* */
if (this == obj){
return true;
}
/*
* 判断传入的参数是否为null,以及传入的参数类型与当前对象的类型是否相符。若为null 或类型不相符,直接返回false.
* */
/* if (obj == null || obj instanceof Student){//错误写法
return false;
}*/
if (obj == null){
return false;
}
if (obj instanceof Student){//正确使用instanceof 关键字比较左边对象是否是右边类型的正确写法。
Student student = (Student)obj;
return age == student.age && Objects.equals(name,student.name);
}
/*
* 统一类型,将传入的参数类型从Object类型向下造型为Student类型,这样才能调用子类型特有的内容进行下一步操作
* */
Student student = (Student)obj;
//比较基本数据类型直接使用==比较内容,当比较引用类型时不能使用==, Objects是Object的工具类
return age == student.age && Objects.equals(name,student.name);
}
自动生成equals() 方法。 getClass 获取运行时对象类型。
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age &&
Objects.equals(name, student.name);
}