Object类:
API介绍:
解析:
- Object类是所有Java中所有类的根(顶级父类),每个类都是Object的子类,其子类可以重写该类的方法,来满足自身需求。
构造方法
public class Demo {
public static void main(String[] args) {
Object object = new Object();
System.out.println(object);//java.lang.Object@50cbc42f
}
}
结论:生成一个引用对象的地址
常用功能方法:
import java.util.Objects;
class Person{
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object obj) {//Object参数是任意类型
//obj.getClass() == getClass() 等于 obj instanceof Person
if (!(obj instanceof Person)){//判断输入参数是否为人类(Person类)
return false;//假的返回false
}
Person person = (Person) obj;//多态的向下转换,Object是所有类的父类
if (this.age == person.age){
return true;
}
return false;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
'}';
}
}
public class Demo3 {
public static void main(String[] args) {
//.equals(Object obj) 比较地址是否相同
Object obj1 = new Object();
Object obj2 = new Object();
boolean b = obj1.equals(obj2);
System.out.println(b);//false
System.out.println(obj1==obj2);//false
//结论:Object中equals和==实现效果都是一致的,用于比较两个对象的地址
//需求:比较两个人是否同龄
//分析:比较两个人的年龄是否相同【对象:人 方法:比较】
Person p1 = new Person();
Person p2 = new Person();
p1.setAge(18);
p2.setAge(18);
b = p1.equals(p2);//上面已经将b定义为boolean
System.out.println(b);//true
object_hasCode();
p1.toString();//Person{age=18}
}
public static void object_hasCode(){
//hashCode()获取十进制的对象地址
Object object = new Object();
int address = object.hashCode();
System.out.println(object);//java.lang.Object@75412c2f
System.out.println(address);//1967205423
//转换成十六进制验证
System.out.println(Integer.toHexString(address));//75412c2f
}
}
问题:
- .toString()返回的是对象的地址,需要重写方法
- .equals()比较是地址,需要重写方法。
结论:
- 在Object类中,.equals( ) 与 == 都是比较地址是否相同。但它们之间的区别是.equals( )是方法,在其他类中可以进行重写, ==只是运算符,无法进行重写,只能比较地址。
- obj.getClass() == getClass() 等于 obj instanceof Person,.getClass()方法是获取数据运行时所在的类, instanceof关键字是判断一个对象是否为一个类的实例。
- hashCode() 获取十进制的对象地址
- .toString(),返回String类型