Java 中Object类的方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hlx20080808/article/details/84942886

Java是单根继承结构语言,也就是说,Java中所有的类都有一个共同的祖先,这个祖先就是Object类。

如图所示:Object类中的方法

说明:

 1、hashCode和equals函数用来判断对象是否相同,  

​
equals()用于确认两个对象是否相同。
hashCode()用于获取对象的哈希值,这个值的作用是检索,具体的作用可以参考这里
哈希值相同的对象不一定equals()
equals()返回true的两个对象一定相同。

​

     equals()通常用来进行比较,在Object类中,它进行了引用的比较,只有引用相同时会返回true,但是这样并不是我们想要的比较的情况,比如字符串的比较是比较每个字符是否相同。

  ==与equals在Java中经常被使用,大家也都知道==与equals的区别:

      ==表示的是变量值完成相同(对于基础类型,地址中存储的是值;引用类型则存储指向实际对象的地址;)

       equals表示的是对象的内容完全相同,此处的内容多指对象的特征/属性。

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

    由此可见,Object原生的equals()方法内部调用的正是==,与==具有相同的含义。既然如此,为什么还要定义此equals()方法?

     equlas()方法的正确理解应该是:判断两个对象是否相等。那么判断对象相等又是什么?

扫描二维码关注公众号,回复: 4461769 查看本文章

   如果自定义的类没有重写equals()方法来重新定义此标尺,那么默认的将是其父类的equals(),直到object基类。

  如果按实际需求,对于StudentBean,由实际的业务需求可知当属性id相同时,表示的是同一个Student,即两个Student对象相等。则可以重写equals以重定义Student对象相等。

​
package com.hlx;

public class Student{

    private int id;
    private String name;
    private int age;


    public Student(int id,String name){
     this.id =id;
     this.name = name;
    }

    public int getId() {
        return id;
    

    public void setId(int id) {
        this.id = id;
    }

    protected 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;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null || !(obj instanceof Student)) {
            return false;
        }
        if (((User) obj).getId() == this.getId()) {
            return true;
        }
        return false;
    }
}

​

 测试结果:

Student stu1=new Student(1100,"mike");      
Student stu2=new Student(1100,"麦克");  
System.out.println(stu1.equals(stu2)); //返回true

        因为Student类定义中重写了equals()方法,判断这两个人是不是同一个人,这时只用判断id是否相同即可。

       如上重写equals方法表面上看上去是可以了,实则不然。因为它破坏了Java中的约定:重写equals()方法必须重写hasCode()方法。

 2、toString()和getClass是可以在运行时获得类。 

源代码如下:

public final native Class<?> getClass();


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

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}


 3、wait(),wait(long),wait(long,int),notify(),notifyAll() 
 4、clone() 
 5、finalize()用于在垃圾回收

猜你喜欢

转载自blog.csdn.net/hlx20080808/article/details/84942886
今日推荐