Object类
超类,基类 是所有类直接或者间接父类,位于继承树的顶点
Object类型可以存储任何对象
作为参数可以接受任何对象
作为返回值可以返回任何对象
getClass方法
返回引用中存储的实际对象类型,常用于判断两个引用中实际存储对象类型是否一致
package studyObject.demo01; public class TestStudent { public static void main(String[] args) { Student s1 = new Student("aaa",10); Student s2 = new Student("bbb",10); //判断s1 s2 是不是同一个类型 Class class1 = s1.getClass(); Class class2 = s2.getClass(); if (class1 == class2){ System.out.println("一样"); } if (class1.equals(class2)){ System.out.println("一样"); } } }
hashCode方法
返回该对象的哈希码值 int类型的
哈希值 根据对象的地址或者字符串或数字使用hash算法计算出来的int类型的数值
一般情况下相同对象返回相同哈希码。
//hashCode方法 System.out.println(class1.hashCode());//一样 System.out.println(class2.hashCode()); System.out.println(s1.hashCode());//不一样 System.out.println(s2.hashCode()); Student s3 = s1; System.out.println(s3.hashCode());//和s1一样
toString方法
返回该对象的字符串表示(表现形式) String类型返回
可以根据程序需求重写该方法
//toString 方法 System.out.println("========================="); System.out.println(s1.toString());//在Student类中已经重写了toString方法 System.out.println(class1.toString()); System.out.println(class2.toString()); System.out.println(s2.toString());
equals方法
默认实现为(this == object) 比较两个对象地址是否相同
可进行覆盖,比较两个对象内容是否相同 返回值为boolean
equals方法覆盖步骤:
-
比较两个引用是否指向同一个对象
-
判断obj是否为null
-
判断两个引用指向的实际对象类型是否一致
-
强转类型装换
-
依次比较各个属性值是否相同
System.out.println("========================="); System.out.println(s1.equals(s2)); Student s4 = new Student("rr",17); Student s5 = new Student("rr",17); System.out.println(s4.equals(s5));//重写方法前比较为false 因为比较的是地址 重新方法后为true System.out.println(s1.equals(s3));
重写方法
//重新object类中equals方法 @Override public boolean equals(Object obj) { // 1. 比较两个引用是否指向同一个对象 if(this == obj){ return true; } // 2. 判断obj是否为null if (obj == null){ return false; } // 3. 判断两个引用指向的实际对象类型是否一致 // if (this.getClass() == obj.getClass()){ // // } //instanceof 判断对象是否是某种类型 if (obj instanceof Student){ // 4. 强转类型装换 Student s = (Student) obj; // 5. 依次比较各个属性值是否相同 if (this.name.equals(s.getName()) && this.age == s.getAge()){ return true; } } return false; }
String类型中字符串比较也是使用equals方法 因为Sting重写了该方法
finalize方法
当对象被判定为垃圾对象时,由jVM自动调用此方法,用以标记垃圾对象,进入回收队列
垃圾对象:没有有效引用指向此对象时,为垃圾对象
垃圾回收:由GC销毁垃圾对象,释放内存空间。
自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象
手动回收机制:使用System.gc();通知JVM执行垃圾回收
package studyObject.demo01; public class TestStudent2 { public static void main(String[] args) { // Student s1 = new Student("aaa",22); // Student s2 = new Student("bbb",22); // Student s3 = new Student("vvv",22); // Student s4 = new Student("ddd",22); // Student s5 = new Student("eee",22); //下面的是垃圾 new Student("aaa",22); new Student("bbb",22); new Student("vvv",22); new Student("ddd",22); new Student("eee",22); //回收垃圾 System.gc(); System.out.println("回收垃圾成功"); } }