Java所有类的超类Object知识点总结
1.如果没有明确的指示出超类,object就是超类。
2.可以使用Obeject作为泛型容器,引用任何类型的对象。
3.只有8大基本类型(byte short int long float double char boolean)不是对象
4.所有的数组类型,都扩展了Object类
5.equals方法
用于检测一个对象是否等于另外一个对象。两个对象具有相同的状态,才算相等。
子类定义equals方法,首先调用超类的equals,如果监测失败,就不可能相等。如果超类中字段相等,就比较子类中的实例字段。
可以用instanceOf还有getClass方法进行检测:
子类有自己的相对性概念,强制使用getClass检测
超类决定相对性概念,可以使用instanceOf检测
**********************
equals的特性:
自反性:x.equals(x)应该返回true
对称性
传递性
一致性
x.equals(null)应该返回false
6.完美的equals方法
(1)显示参数命名为otherObject
(2)检测this与otherObject是否相等
if(this==otherObject) return true;
(3)检测otherObject是否为null 为null返回false
(4)比较二者的类
如果equlas在子类中改变就是用getClas
if(!getClass()!=otherObject.getClass()) return false;
如果所有子类都有相同的相等性语义,则可以使用instanceOf检测
if(!(otherObject instanceOf ClassName)) return false;
(5)将otherObject强制转换为相应类类型的变量
ClassName other =(ClassName) otherObject;
(6)根据相等性概念来比较字段,使用==比较基本类型字段,Object.equals比较对象字段
return salary==other.salary &&Object.equals(name,other.name);
7.hashCode方法
散列码是由对象导出的一个整型值
字符串的散列码是由内容导出的
Objerct类的默认hashCode类方法会从对象的存储地址得出散列码
8.如果重新定义了equals方法就必须重新定义hashCode方法。
如果x.equals(y)返回为true
那么必须x.hashCode() y.hashCode()相等
9.toString方法
返回表示对象值的一个字符串
public String toString() { return getClass().getName() +"[name="+name +"salary="+salary +"]"; }