Object类
/**
* 知识点:Object类
* 含义:该类是所有类的超类/基类
* 理解:如果一个类没有明确继承的父类,都默认继承Object
*
* equals():判断两个对象内存地址是都相同
* public boolean equals(Object obj){
* return (this == obj);
* }
*
* getClass():获取类的class对象
* 理解:
* 使用到一个类(new对象、调用静态属性/方法),
* JVM就会将该类的class文件加载到方法区中,
* 并在堆内存中创建class对象,
* class对象作为class文件的访问入口(想使用到class文件,就必须找到对应的class对象)
* 注意:
* 1.class文件中包含了该类所有的信息(有几个成员属性、有几个静态属性、有几个构造方法、有几个成员方法、有几个静态方法....)
* 2.该类的class文件只加载一次,该类的class对象在内存中只有一个
*
* hashCode():获取对象的hash值
* 注意:
* 1.hash值等于内存地址+散列算法,算出来的一个int值,该int值表示对象在hash表中的下标
* 2.hash值不等于内存地址
*
* toString():获取对象的字符串表示
* public String toString(){
*
* //getClass().getName() -- 获取class对象再获取名 -- 全路径(包名+类名)
* //Integer.toHexString(hashCode()) -- 获取对象的hash值的十六进制表示
* java.lang.Object @ 15db9742
* return getClass().getName() + "@" + Integer.toHexString(hashCode());
* }
*
*/
深入Object类
equals():判断两个对象的内存地址是否相同
package com.qf.test01;
public class tet01 {
/**
* 深入Object
* @param args
* equals():判断两个对象的内存地址是否相同
* 标杆作用:判断两个对象是否相同。 不同的子类判断对象之间是否相同的规则是不一样的,所以子类重写equals()即可
*
*/
public static void main(String[] args) {
Student stu1 = new Student("张三", '男', 18, "001");
Student stu2 = new Student("李四", '女', 18, "002");
Student stu3 = new Student("张三", '男', 18, "001");
System.out.println(stu1.equals(stu2));//false
System.out.println(stu1.equals(stu3));//true
}
}
@Override
public boolean equals(Object obj) {
//先判断两个对象的内存地址是否相同,如果内存地址都相同,肯定就是同一个对象
if (this == obj){
return true;
}
//对象的向下转型(父类类型 转 子类类型)
Student stu = (Student) obj;
if(this.id.equals(stu.id)){
return true;
}
return false;
}
getClass():获取该类的class对象
hashCode():获取对象的hash值
toString():获取对象的字符串表示(标杆作用:不同的子类有着不同的属性,子类重写toString()即可)
String底层
/**
* 知识点:String的equals()和toString()底层原理
*
* 理解:String表示字符串类,实际上就是把字符串转换为字符数组去存储
*
* String的equals():重写了Object类的equals方法,判断原理是先判断两个字符串中的字符数组的长度是否相同,相同再判断字符的Unicode
* String的toString():重写了Object类的toString方法,拼接字符数组
*/
标签:20,String,对象,Object,equals,Student,2023,class
From: https://blog.51cto.com/u_15098423/6318611