有关Object类的方法

      在java中,如果不用关键字extends显式地指出类的父类,那么父类就是Object类。所有的类都有一个公共的父类Object。Object类是java中唯一一个没有父类的类,是java最顶层的父类。

(1)equals()方法

    Object类提供的equals()方法默认是比较地址的,并不能对内容进行比较,所以自定义的类如果要比较内容需要覆盖Object类的equals()方法。

    equals()方法和运算符“==”都可以用于判断是否相等,均返回boolean值,两者的区别如下:

  • 使用范围不同 

    运算符“==”可以不交基本数据类型,也可以比较引用数据类型;而equals()方法只能比较引用数据类型

  • 运算符“==”的功能

    比较基本数据类型时是比较数值是否相等;比较引用数据类型时是比较两个引用的值,即地址是否相等。

  • 方法equals()的功能

    比较两个引用的值,即地址是否相等。很多子类中的equals()方法覆盖了Object类的equals()方法,改变了方法的功能。

public class Peoples {
    private String name;
    public Peoples(String name){
        this.name=name;
    }
    public void fun(){
        
    }
    @Override
    public boolean equals(Object obj) {
        // TODO Auto-generated method stub
        Peoples p=(Peoples) obj;
        return name==p.name;
    }
    public static void main(String[] args){
        Peoples p=new Peoples("zs");
        Peoples p1=new Peoples("zs");
        String str="hello";
        System.out.println(p.equals(p1));
    }
}

 (2)hashCode()方法

      该方法返回的是对象的哈希码。哈希码是一个代表对象的整数,在程序的运行期间,每次调用同一个对象的hashCode()方法,返回的哈希码必定是相同的;但是多次执行同一个程序,程序的一次执行和下一次执行期间,同一个对象的哈希码不一定相同。实际上,默认的哈希码是将对象的内存地址通过某种转换得到的,所以不同对象会有不同的哈希码。

public class Peoples {
    private String name;
    public Peoples(String name){
        this.name=name;
    }
    public void fun(){
        
    }
    public static void main(String[] args){
        Peoples p=new Peoples("zs");
        Peoples p1=new Peoples("zs");
        String str="hello";
        System.out.println(str.hashCode());
    }
}

(3)toString()方法 

      Object类的toString()方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:

getClass().getName() + '@' + Integer.toHexString(hashCode())

      返回该对象的字符串表示。通常,toString()方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。

(4)instanceof方法

判断一个类是否实现了某个接口,也可以用它来判断一个实例对象是否属于一个类;它的返回值是布尔型的

 
public class Peoples{
    private String name;
    public Peoples(String name){
        this.name=name;
    }
    @Override
    public boolean equals(Object obj) {
        if(obj instanceof Peoples){
            Peoples p=(Peoples) obj;
            return name==p.name;
        }
        return false;
    }
    public static void main(String[] args){
    Peoples p=new Peoples("zs");
    Peoples p1=new Peoples("zs");
    String str="hello";
    System.out.println(p.equals(p1));

}

(5)getClass()方法

      获得类的信息

public class Peoples{  
    public static void main(String[] args) {   
        Peoples t=new Peoples();  
        System.out.println(t.getClass().getName());  
        System.out.println(t.getClass().getSuperclass());  
    }  

(6)clone方法

       返回的是Object类,是继承类型的修饰符

class Cat implements Cloneable{
    String catName;
    public Cat(String name){
        catName=name;
    }
    @Override
    protected Object clone() throws CloneNotSupportedException {
        // TODO Auto-generated method stub
        return super.clone();
    }
}

class Dog implements Cloneable{
    String dogName;
    Cat c;
    public Dog(String name){
        dogName=name;
        c=new Cat("cc");
    }
    @Override
    protected Object clone() throws CloneNotSupportedException {
        // TODO Auto-generated method stub
        
        Cat temp = (Cat) c.clone();//拷贝Cat里的基本数据类型,String
        Dog d =(Dog) super.clone();//拷贝Dog里的基本数据类型以及String,引用数据变量
        d.c=temp;
        return d;
    }
}
public class Peoples{
    public static void main(String[] args){
        Dog d1=new Dog("aa");
        
        Dog d2=new Dog("bb");//"aa"
//        System.out.println(d1);//打印出来的是地址
        try {       //处理异常
            
            d2 = (Dog) d1.clone();
            d2.c.catName="666";
            System.out.println(d1.c.catName);
            
        }catch (CloneNotSupportedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/ZQ_313/article/details/82661815