在Java中Object类是所有类的父类,也叫做超类(super Class),当一个类没有明确要继承的父类时,它就默认继承Object类。
Object类的常用方法
- equals():判断两个对象的内存地址是否相等。
- getClass():获取该类的class对象(class对象在堆内存中是唯一的)
- hashCode():获取该对象的hash值(hash值不等同于对象的内存地址,是内存地址+散列算法得到的一个数字)
- toString():获取对象的字符串形式
常用方法详解
1. equals()
Object o = new Object();
Object o2 = new Object();
System.out.println(o == o2); //判断两个对象的地址是否相等--false
System.out.println(o.equals(o2)); //判断两个对象地址相等--false
//equals()方法的底层源码
// public boolean equals(Object obj){
// return (this == obj); //判断对象地址
// }
}
2. getClass()
Object o = new Object();
Object o2 = new Object();
//getClass() 获取对象类的class对象。每一个类的class对象都是唯一的
System.out.println(o.getClass() == o2.getClass()); //所以结果weitrue
System.out.println(o.getClass().getName());
System.out.println(o2.getClass().getName()); //java.lang.Object 类名
3.hashCode()
Object o = new Object();
//hashCode() 获取对象的hash值,(hash值不等于内存地址,是内存地址+散列算法计算出来的一个数字)
System.out.println(o.hashCode()); //366712642
4. toString()
Object o = new Object();
Object o2 = new Object();
//获取对象的字符串形式
System.out.println(o); //默认会去调对象的toString()方法
System.out.println(o2.toString()); //java.lang.Object@15db9742
//toString()方法的底层源码
// public String toString(){
//
// java.lang.Object @ 获取对象hash值的十六进制形式
//return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
// }
Object类使用
object类作为所有类的父类/超类,提供了很多方法供子类重写使用。比如String类就重写了Object类的toString()方法。
案例:
public class ObjectDemo1 {
/**
* 重写equals()方法,来比较两个对象的某一个属性是否相同
*
* 重写toString()方法,来打印对象的所有属性
*/
private String uname;
private String password;
private String nickname;
public ObjectDemo1() {
//无参构造方法
}
public ObjectDemo1(String uname, String password, String nickname) {
this.uname = uname;
this.password = password;
this.nickname = nickname;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
//子类重写Object类的equals方法
@Override
public boolean equals(Object obj) {
if(this == obj){
return true;
}
ObjectDemo1 o2 = (ObjectDemo1) obj;
//注意,因为uname是String类型,所以他们这个地方比较使用的equals()是String类重写的equals()方法
if(this.getUname().equals(o2.getUname())){
return true;
}
return false;
}
//子类重写Object类的toString方法
@Override
public String toString() {
return this.getUname()+"---"+this.getPassword()+"---"+this.getNickname();
}
}
//ObjectDemo2测试类
public class ObjectDemo2 {
public static void main(String[] args) {
ObjectDemo1 u1 = new ObjectDemo1("bbbaaa","123456","大马猴");
ObjectDemo1 u2 = new ObjectDemo1("bbbaaa","321321","光头强");
//业务需求假设:判断两个对象的账号是否相等,如果相同,那么就认为是同一个对象
System.out.println(u1.equals(u2)); //true--- 这里的equals是ObjectDemo1中重写的equals方法
//打印对象
System.out.println(u1);//bbbaaa---123456---大马猴
System.out.println(u2);//bbbaaa---321321---光头强
//注意,打印语句会自动去调用对象的toString()方法,如果没有找到就一直想上寻找,直到Object类的toString方法
}
}