Java基础之Object类

Object: 所有类的超类

    在Java中每个类都是由 Object 扩展而来,如果没有明确指出超类,Object 就被认为是这个类的超类。

  • equals()
  • hashCode()
  • toString()

equals()方法

  • Object 类中 equals() 方法源码
public boolean equals(Object obj) {
    return (this == obj);
}

    Object 类中 equals() 方法仅判断两个对象是否具有相同的引用。然而,多数情况下,这种判断并没有什么意义。
    例如:两个员工对象的姓名、年龄、薪水都一样,就可以认为他们是相等的。
    此时,需要重写 equals() 方法。

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Employee employee = (Employee) o;
    return age == employee.age &&
            Double.compare(employee.salary, salary) == 0 &&
            Objects.equals(name, employee.name);
}

hashCode()方法 -- 如果重写equals方法,就必须重写hashCode方法

  • Object 类中 hashCode() 方法源码
    每个对象都有一个默认的散列码,其值为对象的存储地址。
public static int hashCode(Object o) {
    return o != null ? o.hashCode() : 0;
}

一起重写 equals() 方法和 hashCode() 方法是为了便于用户可以将对象插入到散列表中。

@Override
public int hashCode() {
    return Objects.hash(name, age, salary);
}

toString()方法

  • Object 类中 toString() 方法源码
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
// output: OOP.Employee@745f    对象存储地址
  • 重写 toString() 方法
@Override
public String toString() {
    return "Employee{" +
            "name='" + name + '\'' +
            ", age=" + age +
            ", salary=" + salary +
            '}';
}

equals() 与 == 的区别

Java中数据类型可分为两类:
    1、基本数据类型
         * 数值型:byte short int long float double
         * 布尔型:boolean
         * 字符型:char
    2、引用数据类型
         * 类
         * 接口
         * 数组

  • 基本数据类型的比较应该用 ==,比较的是他们的值。
  • 字符串缓冲池

    程序在运行的时候会创建一个字符串缓冲池.当使用 str1 = "123" 这样的表达是创建字符串的时候,程序首先会在字符串缓冲池中寻找相同值的对象,在第一个程序中,str1 先被放到了池中,所以在 str2 被创建的时候,程序找到了具有相同值的 str1.
    所以 str1 与 str2 引用同一个对象。

String str1 = "123";
String str2 = "123";
System.out.println(str1 == str2);

// 输出: true
  • 对于引用数据类型,当使用 == 进行比较的时候,比较的是他们在内存中存放的地址。Object 类中 equals()方法就是使用 == 进行比较的。所以在没有重写 equals() 方法的情况下,引用数据类型的比较还是基于他们在内存中的存放地址的。
  • String 类重写了 Object 类的 equals() 方法,比较的是两个 String 对象的值。
public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String aString = (String)anObject;
        if (!COMPACT_STRINGS || this.coder == aString.coder) {
            return StringLatin1.equals(value, aString.value);
        }
    }
    return false;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值