Object类
介绍:
-
所有的类,都直接或者间接的继承了 Object 类 (祖宗类)
-
Object类的方法是一切子类都可以直接使用的,所以我们要学习Object类的方法。
常用方法:
方法名 | 说明 |
---|---|
public String toString() | 默认是返回当前对象在堆内存中的地址信息:类的全限名@内存地址 |
public Boolean equals(Object o) | 默认是比较当前对象与另一个对象的地址是否相同,相同返回true,不同返回false |
5.2.1toString
方法名 | 说明 |
---|---|
public String toString() | 默认是返回当前对象在堆内存中的地址信息:类的全类名@十六进制哈希值 |
当我们打印对象名的时候, println() 源码中会自动调用对象的toString方法。
public static String valueOf(Object obj) {
return (obj == null) ? "null" :obj.toString();
}
Object类toString方法的源码:
public String toString() {
return getClass().getName() +
"@" + Integer.toHexString(hashCode());
}
解释:对象的全类名@十六进制哈希值
哈希值 = 对象的值 + 哈希算法, 常被人称作地址值
toString存在的意义:
-
父类 toString() 方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息。
-
返回对象的属性信息(成员变量的值), 便于调试操作。
-
今后打印某一个对象的名字, 看到的不是地址值, 就说明该类重写过toString方法。
5.2.2equals
方法名 | 说明 |
---|---|
public boolean equals(Object o) | 默认是比较当前对象与另一个对象的地址是否相同相同返回true,不同返回false |
//Object类中equals的源代码
public boolean equals(Object obj) {
return (this == obj);
}
父类equals方法存在的意义就是为了被子类重写,以便子类自己来定制比较规则
//如下,就是在类中重写equals方法
//stu1.equals(stu2)
//o:stu2对象
public boolean equals(Object o) {
//如果地址相同则直接返回true
if (this == o) return true;
//如果stu2是null或stu1和stu2的类型不相同(这里直接用他们的.class文件进行比较),则直接返回false
if (o == null || getClass() != o.getClass()) return false;
//由于接收的是Object对象,而其没有age属性,所以需要强制转化
Student student = (Student) o;
return age == student.age && Objects.equals(name, student.name);
}
使用此方法比较,如stu1.equals(stu2)时,如果stu1为null,则会出现空指针异常
Objects
Objects类与 Object 还是继承关系,Objects类是从JDK 1.7开始之后才有的。
方法名 | 说明 |
---|---|
public static boolean equals(Object a, Object b) | 比较两个对象的,底层会先进行非空判断,从而可以避免空指针异常。再进行equals比较 |
public static boolean isNull(Object obj) | 判断变量是否为 null |
equals
使用方法
Object.equals(对象1,对象2);
源码分析
public static boolean equals(Object a, Object b) {
//先比价a,b地址是否相同,相同则||右边短路,返回true
//不同则在判断a是否为null,如果是则&&右边短路,返回false
//不是在调用equals方法比较,返回方法的返回值
return (a == b) || (a != null && a.equals(b));
}
接口是否继承了Object?
接口表面上不能继承Object,但底层继承了Object
标签:对象,Object,equals,Objects,toString,null,public From: https://www.cnblogs.com/linzel/p/18087322