Object类

Object类,第1张

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()

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/915602.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存