Java-Object
1 概述
Object是所有类的父类,也就是说Object的方法所有类都有
2 方法
2.1 Equals
public boolean equals(Object obj){
return this == obj;
//o1.equals(o2);this是o1,obj是o2
}
equals方法设计的目的:比较两个对象是否相等,是否为同一个对象,而Object中的equals默认比较内存地址
== 比较基本类型是比较值的大小,比较引用类型比较的是内存地址,两个对象的内存地址肯定不相同
如果我们比较两个对象的内存地址,那没有任何价值,我们一定是用两个对象中的具体属性进行比较才有价值,但是Object不知道我们要比较什么,所以就默认比较地址,当我们需要比较时,根据需求对equals进行重写即可
只要是引用类型比较,就需要equals,但是我们自己的类需要重写equals方法
而很多系统类都已经重写了equals方法,比如String
2.2 Finalize
JVM:跨平台,面向对象,多线程,自动垃圾回收机制
1 每个对象都有
2 不需要每个程序员调用,有系统自动调用
3 垃圾:没有更多的引用指向该对象的时候,该对象被视为垃圾数据
堆内存有这个对象,但是谁也找不到他,他就是垃圾,此时就等待被回收
4 对象被回收之前们会自动帮我们调用该对象的finalize方法
finalize方法并没有垃圾回收功能,只是被回收之前,自动执行而已
所以我们手动调用该方法是没有意义的
2.3 toString
设计目的: 返回该对象的字符串表示形式,可以通过这方法,把每个对象的数据输出出来,让外界知道
输出一个引用类型的时候,底层会自动调用该对象的toString方法
Object中的toString方法
public String toString(){
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
2.4 hashCode
设计目的: 是为了给每个对象生成一个唯一的标识符
同一个对象生成多次值,值一定相同
不同对象生成的值,也有可能相同,又叫hash冲突
重写hashCode的时候,还需要考虑重写equals,因为只是hashCode和equals其中的一个,是没有办法在散列表中表示唯一性的
hash算法是一种安全的加密算法,把不定长的值改为定长的值,不能保证唯一性
直接寻址法
数字分析法
除留余数法
随机数法
折叠法
hashCode就是返回该对象的hash值