Object类中的方法

简介: Object类中的方法


equals方法

源代码:

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

SUN公司设计equals方法目的?

equals方法的设计初衷是判断两个对象是否相等,但是源代码中通过“ == ” 来判断是明显不行的,通过 “ = = ”来判断的仅仅是二者的内存地址。

例如以下代码:

public class Test {
    public static void main(String[] args) {
        MyTime s1 = new MyTime(2001,1,1);
        MyTime s2 = new MyTime(2001,1,1);
        System.out.println(s1.equals(s2));
    }
}
class MyTime{
    int year;
    int month;
    int day;
    public MyTime(int year,int month,int day)
    {
        this.day = day;
        this.year = year;
        this.month = month;
    }
};

编译结果是false,仅管两个对象中存的东西是一样的,但是二者的内存地址不同。

如何使用equals方法?

在大多数情况下equals都是需要程序员自己重写的,在重写时,程序员根据自己的需求,认为对象中什么相等时,两个对象就相等。

继续使用上例,如果想认为当year相等时,两个对象就相等,那么可以这样写:

class MyTime{
    int year;
    int month;
    int day;
    public MyTime(int year,int month,int day)
    {
        this.day = day;
        this.year = year;
        this.month = month;
    }
    public boolean equals(Object obj){
       //内存地址一样,说明两个引用指向同一个对象
        if(obj == this){
            return true;
        }
        //访问子类特有属性时,需要向下转型
       if(obj instanceof MyTime) {
           MyTime obj2 = (MyTime) obj;
           return this.year == obj2.year;
       }
       return false;
    }
};

String类中对equals的重写

SUN公司在设计equals方法时希望使用者对它进行重写,因此在他们自己写的String类中已经对equals方法进行重写了。

在jdk-11.0.2中对equals进行了如下重写:

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String aString = (String)anObject;
            if (coder() == aString.coder()) {
                return isLatin1() ? StringLatin1.equals(value, aString.value)
                                  : StringUTF16.equals(value, aString.value);
            }
        }
        return false;
    }

当想要比较两个字符串是否相等时,就可以直接调用equals方法,如下:

public class Test {
    public static void main(String[] args) {
       String s1 = "1234";
       String s2 = "1234";
        System.out.println(s1.equals(s2));
    }
}

编译结果:true

hashCode()方法

源码:

public native int hashCode();


相关文章
|
6天前
|
数据安全/隐私保护
作用域通信对象:session用户在登录时通过`void setAttribute(String name,Object value)`方法设置用户名和密码。点击登录按钮后,跳转到另外一个页面显示用户
该博客文章通过示例演示了如何使用session对象的`setAttribute`和`getAttribute`方法在不同页面间传递和显示用户的用户名和密码信息,并说明了如何设置会话的有效期。
作用域通信对象:session用户在登录时通过`void setAttribute(String name,Object value)`方法设置用户名和密码。点击登录按钮后,跳转到另外一个页面显示用户
|
6天前
|
前端开发 Java 编译器
【前端学java】java中的Object类和前端中的Object有什么区别(9)
【8月更文挑战第10天】java中的Object类和前端中的Object有什么区别
14 0
【前端学java】java中的Object类和前端中的Object有什么区别(9)
|
11天前
|
算法 Java
12 Java常用类(一)(内部类+object类+包装类)
12 Java常用类(一)(内部类+object类+包装类)
25 5
|
1月前
|
Java
Java中的Object类 ( 详解toString方法 | equals方法 )
Java中的Object类 ( 详解toString方法 | equals方法 )
|
2月前
|
存储 JSON 前端开发
JavaScript 进阶征途:解锁Function奥秘,深掘Object方法精髓
JavaScript 进阶征途:解锁Function奥秘,深掘Object方法精髓
|
2月前
|
Java
【Java】Object类简单解析
【Java】Object类简单解析
25 1
|
2月前
|
前端开发 JavaScript Java
Java基础10-深入理解Class类和Object类(二)
Java基础10-深入理解Class类和Object类(二)
30 5
|
2月前
|
Java C++
Java基础10-深入理解Class类和Object类(一)
Java基础10-深入理解Class类和Object类(一)
30 4
|
2月前
|
Java API
API:object当中的各种方法刨析(今日份:equals toString)
API:object当中的各种方法刨析(今日份:equals toString)
|
2月前
|
Java API
JavaSE——常用API进阶一(1/3)-Object类(Object类的作用、Object类的常见方法-toString方法、equal方法、clone方法)
JavaSE——常用API进阶一(1/3)-Object类(Object类的作用、Object类的常见方法-toString方法、equal方法、clone方法)
21 0