Object类中的主要方法

Object类中的主要方法

​ 在Java中,只有基本类型不是对象,例如,数值、字符和布尔类型的值都不是对象。所有的数组类型,不管是对象数组还是基本类型的数组都扩展了Object类。

1. equals()方法

​ Java语言规范要求equals方法具有下面的特性:

  • 自反性:x.equals(x); // true

  • 对称性:x.equals(y) == y.equals(x);//true

  • 传递性:

    if(x.equals(y) && y.equals(z)){
        x.equals(z);//true 
    }
    
  • 一致性:多次调用equals方法结果不变。反复调用x.equals(y)应该返回相同的结果。

  • 对任意非空引用x,x.equals(null)应该返回false。

下面给出一个编写equals方法的例子:

public boolean equals(Object other){
    if(this == other){
        return true;
    }
    if(other == null){
        return false;
    }
    if(getClass() != other.getClass()){
        return false;
    }
    Employee o = (Employee) other;
    return field1 == o.field1 && Objects.equals(field2, o.field2) && ...;
}

2.hashCode方法

​ hashCode()方法的作用:根据一定的规则将对象相关的信息(比如对象的存储地址、对象的字段等)映射成一个数值(int类型),这个数值称作为散列值。hashCode方法就是返回散列值。

 由于hashCode()方法定义在Object类中,因此每个对象都有一个默认的散列码,其值为对象的存储地址。

​ 等价的两个对象散列值一定相同,但是散列值相同的两个对象不一定等价。例如:

对象散列码
s2556
sb20526976
t2556
st20527144

注意:字符串s和t 拥有相同的散列码,这是因为字符串的散列码是由内容导出的。而字符串缓冲sb、tb却有着不同的散列码,这是因为在StringBuffer类中没有定义hashCode方法,它的散列码是由Object类的默认hashCode方法导出的对象存储地址。

3.toString()方法

​ 随处可见同toString()方法的主要原因是:只要对象与一个字符串通过操作符 “+” 链接起来,Java编译就会自动地调用toString()方法,以便获得这个对象的字符串描述。例如:

Point p = new Point(10, 20);
String message = "The current position is:" + p;

在调用x.toString()的地方可以用 “” + x 代替。这条语句将一个空串与x的字符串表示相连接。这里的x就是x.toString()。与toString()不同的是,如果x是基本类型,这条语句照样能够执行。

​ 如果x是任意一个对象,并调用System.out.println(x); println方法就会直接地调用x.toString(),并打印输出得到的字符串。

​ Object类定义了toString方法,用来打印输出对象所属的类名和散列码。

### 4.clone()方法浅析
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值