Object类

Object类

Object类是java所有类的超类,如果一个类没有明确的指出超类,Object就被认为是这个类的超类。

Object类型的变量

可以使用Object类型的变量引用任何类型的对象,但是具体使用时,还是要进行强制类型转换

在java中,只有基本类型不是对象

equals方法

equals方法可以用于检测一个对象是否等于另外一个对象,Object类中的equals方法是确认两个对象的引用是否相同

具体使用时可以进行重写equals方法    

public boolean equals (Object ob) {
	// 查看引用是否相同
    if (this == ob) {
		rteurn true;
    }
    
    // 查看是否为null
    if(ob == null) {
		return false;
    }
    
    // 查看类是否相同
    if (getClass() != ob.getClass()) {
		return false;
    }
    
    // 现在知道了ob与当前对象是同一个类的,且不为null,假设为A类
    A other = (A) ob;
    
    // 对该对象中相应的变量进行比较,随便举几个例子
    return name.equals(ob.name) && money == ob.money
}
 

在子类定义equals时,可以首先调用超类的equals方法

java语言规范要求equals方法具有以下特性

  1. 自反性:对于任何非空引用x x.equals(x)应返回true

  2. 对称性:对于任何引用x,y 当x.equals(y) 返回true时, y.equals(x)也应返回true

  3. 传递性:对于任何引用x,y,z 当x.equals(y) 返回true时, y.equals(z)返回true x.equals(z)也应返回true

  4. 一致性:如果x,y引用的对象没有发生变化,反复调用x.equals(y)应该返回相同的结果

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

编写一个完美的equals方法的建议

  1. 将传入的参数命名为otherObject,后面将其强转命名为other

  2. 先检测两个对象的引用是否相同

  3. 检测传入的otherObject是否为null,如果为null返回false

  4. 比较this和otherObject的类,如果equals的语义可以在子类改变,就用getClass,如果所有的子类都有相同的语义,可以用instanceof

  5. 将otherObject强转为相应类型

  6. 根据相等性要求来比较字段,== 比较基本数据类型,Object.equals比较对象字段(如果是子类重新定义equals,要调用父类的equals)(super.equals(other))

第四条可以理解为:

比如说有一个超类为person,两个子类,一个为teacher 另一个为student

person只定义 name id这两个变量

student也定义name 和 id

teacher相较于sutdent多salary这一个变量

如果两个teacher进行比较时,必须name id salary都必须相同,要用getClass

如果统一用id来进行比较,就能使用instanceof

hashCode方法

每一个对象都有一个默认的散列码,由对象的存储地址得出,String是由内容得出的,内容一样,则hashCode相同

equals和hashCode方法必须相容,如果x.equals(y)返回true,那么x.hashCode()和y.hashCode()必须返回相同的值,所以如果重新定义了equals方法,必须重新定义hashCode方法

toString方法

Object的toString方法会返回对象值的一个字符串

在设计子类的时候,可以重写自己的toString方法

当一个对象与一个字符串通过 + 连接起来,java编译器会自动调用toString方法

当一个对象x 调用System.out.println(x) 方法时,也会调用x.toStirng()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

健鑫.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值