一、Object类
1.1含义
所有类的基类/超类,一个类没有明确继承的父类,都默认继承Object
1.2 euqals()
判断两个对象内存地址是否相同
public boolean equals(Object obj){
return (this == obj);
}
package com.qf.test01;
public class A {
private String str;
private char c;
private int i;
public A() {
}
public A(String str, char c, int i) {
this.str = str;
this.c = c;
this.i = i;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
public char getC() {
return c;
}
public void setC(char c) {
this.c = c;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
}
package com.qf.test01;
public class Test01 {
public static void main(String[] args) {
A a1 = new A();
A a2 = new A();
System.out.println(a1 == a2);//引用数据类型使用==是比较内存地址是否相等
System.out.println(a1.equals(a2));
int a = 100;
int b = 200;
System.out.println( a == b);//基本数据类型使用==是比较值是否相等
}
}
1.3 getClass()
获取该类的class对象(class对象作为class文件的访问入口)
package com.qf.test01;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Test02 {
public static void main(String[] args) {
A a1 = new A();
A a2 = new A();
Class<? extends A> c1 = a1.getClass();//获取A类的class对象
Class<? extends A> c2 = a2.getClass();//获取A类的class对象
System.out.println(c1 == c2);//true
System.out.println("----------");
//获取该类所有的属性
Field[] fields = c1.getDeclaredFields();
for (Field field : fields) {
System.out.println(field);
}
System.out.println("----------");
//获取该类所有的构造方法
Constructor<?>[] constructors = c1.getDeclaredConstructors();
for (Constructor<?> constructor : constructors) {
System.out.println(constructor);
}
System.out.println("----------");
//获取该类所有的方法
Method[] methods = c1.getDeclaredMethods();
for (Method method : methods) {
System.out.println(method);
}
}
}
1.4 hashCode()
获取到对象的hash值(hash值 - 内存地址+散列算法,hash值不等于内存地址)
package com.qf.test01;
public class Test03 {
public static void main(String[] args) {
A a1 = new A();
A a2 = new A();
System.out.println(a1.hashCode()); //获取a1的哈希值
System.out.println(a2.hashCode()); //获取a1的哈希值
}
}
1.5 toString()
获取对象的字符串形式(将对象转换为字符串)
public String toString(){
//getClass().getName() - 获取class对象的名字(类的全路径-报名+类名)
//Integer.toHexString(hashCode()) - 获取对象的hash值的十六进制表示(hash值原本是十进制)
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
package com.qf.test01;
public class Test04 {
public static void main(String[] args) {
A a1 = new A();
//com.qf.test01.A @ 15db9742
System.out.println(a1);//打印对象,默认调用toString()
System.out.println(a1.toString());
}
}
二、深入Object的标杆作用
2.1前言
所有的类都直接或间接继承Object,所以所有的类都能使用Object里的方法
2.2Object - equals():
含义:比较两个对象的内存地址是否相同
标杆作用:比较两个对象是否相同,但是不同的子类判断两个对象是否相同规则是不一样的,所以在子类中重写equals方法即可
package com.qf.test02;
public class User {
private String username;
private String password;
private double money;
public User() {
}
public User(String username, String password, double money) {
this.username = username;
this.password = password;
this.money = money;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
@Override
public boolean equals(Object obj) {
//先判断两个对象的地址是否相同,地址都相同,证明是同