Object类

Java中所有类的顶级父类(超类),任何一个类都直接或间接的继承Object,也就是说任何一个类的对象都可以赋值给一个Object对象(向上造型).

clone()(用protect修饰)   创建并返回此对象的一个副本

package cn.tedu.object;
public class ObjectDemo1 implements Cloneable {
    int i;
    public static void main(String[] args) throws Throwable {
        ObjectDemo1 od1 = new ObjectDemo1();
        od1.i = 10;
        // 一个类所产生的对象要想被克隆,那么这个类必须实现Cloneable接口
        // Cloneable接口中没有任何的方法和属性,仅仅用作一个标志
        // 产生了一个新对象,而新对象的属性值和原对象一样
        ObjectDemo1 od2 = (ObjectDemo1) od1.clone();
        System.out.println(od2.i);
                //调用哪个对象,只能在对应子类中用,p对象不在对应的Person类中,所以不能使用clone方法
        // Person p = new Person();
        // p.clone();
    }
}
// class Person implements Cloneable {
// }    
View Code

finalize()   通知gc进行回收,不能直接调用gc,gc不一定启动

对象.finalize();

或者

System.gc();(该方法底层调用的是finalize方法)

getClass()   返回此Object的运行时类

Object o = "abc";
//获取对象的实际类型
System.out.println(o.getClass());

hashcode()   返回该对象的哈希码值

Object o = new Object();
//哈希码是根据哈希散列算法计算出来的
//哈希散列算法要求计算出来的值随机的散落在int的取值范围内
//存储对象时以对象的哈希码作为基准
System.out.println(o.hashCode());

toString()   返回该对象的字符串表示

System.out.println(o);
System.out.println(o.toString());
// 当直接打印对象的时候,实际上底层默认调用对象的toString方法
public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
//二进制Bin八进制Oct十进制Dec十六进制Hex
// 如果重写了这个toString,那么按照重写之后的形式来返回

equals()   比较俩对象是否相等

public boolean equals(Object obj) {
        return (this == obj);
}

重写equals()方法,比较包含具体属性的俩对象是否相等

package cn.jay.exer;
public class Exer5 {
    public static void main(String[] args) {
        Student1 s=new Student1();
        s.setName("xiao");
        s.setAge(30);
        s.setId("管理01");    
        Student1 s1=new Student1();
        s1.setName("xiao");
        s1.setAge(30);
        s1.setId("管理01");
        //System.out.println(s.getName());
        //底层用==进行比较,==默认比较的是地址
        System.out.println(s.equals(s1));
    }
}
class Student1{
    String name;
    int age;
    String id;    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    @Override
    public boolean equals(Object obj) {
        //判断地址是否一致
        if (this == obj)
            return true;
        //判断参数是否为空
        if (obj == null)
            return false;
        //判断类型是否一致
        if (getClass() != obj.getClass())
            return false;
        //将obj强转为Student1类型,保持类型一致,然后比较两个对象的属性值
        Student1 s = (Student1) obj;
        if (age != s.age)
            return false;
        //id是String类型,所以需要使用String中的equals比较
        if (id == null) {
            if (s.id != null)
                return false;
        } else if (!id.equals(s.id))
            return false;
        //name是String类型,所以需要使用String中的equals比较
        if (name == null) {
            if (s.name != null)
                return false;
        } else if (!name.equals(s.name))
            return false;
        return true;
    }    
}
View Code
原文地址:https://www.cnblogs.com/lj-cn/p/9343524.html