object类的概述
object类是类层次结构的根类,每个类都使用object作为超类。
即每个类都直接或间接的继承object类。
object类中方法介绍
hashCode
public int hashCode():返回对象的哈希码值。
注意:哈希值是根据哈希算法计算出来的一个值,该值与地址值有关,但不是实际的值。可理解为地址值。
getClass
public final Class> getClass():返回object运行时类,得到一个Class对
象。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象
。
在Class类中有getname()方法以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
toString
public String toString():返回该对象的字符串表示。
toString方法返回一个字符串,它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
源码:
public String toString() {
return getClass().getName() + "@" +
Integer.toHexString(hashCode());
}
ps:Integer.toHexString()为Integer类下一静态方法,
public static String toHexString(int i):以十六进制(基数 16)无符号
整数形式返回一个整数参数的字符串表示形式。
toString()方法返回的信息是无意义的。所以建议所以子类重写改方法。
重写的格式为:把所有成员变量值返回即可。
但这样不是最好,最好由编译器自动生成即可。
class Test{
int num;
//此处是自动生成的代码
@Override
public String toString() {
return "Test [num=" + num + "]";
}
}
class Main{
public static void main(String[] args){
Test t = new Test();
//测试直接输出对象的结果
System.out.println(t);
}
}
out:
Test [num=0]
直接输出一个对象的名称,就是调用改对象的toString()方法。
equals
public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。
Object类中的源码:
public boolean equals(Object obj) {
return (this == obj);
}
通过查看Object类中的equals()源码可知在没有重写equals()的情况下,equals()方法是由"=="实现。
==:
基本类型:比较值是否相等。
引用类型:比较其地址值是否相等。
equals()方法,默认情况比较的是地址值,但是比较地址值意义不大,所以要重写改方法。
在方法重写时,比较对象的成员变量值是否相同。
重写代码优化:提高效率,提高程序健壮性。
要想做到最好优化还是自动生成。(自动生成时会和hascode()方法一起生成。至于为什么这两个方法需要同时生成在集合中有解释)
class Test{
int num;
String sfa;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + num;
result = prime * result + ((sfa == null) ? 0 : sfa.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Test other = (Test) obj;
if (num != other.num)
return false;
if (sfa == null) {
if (other.sfa != null)
return false;
} else if (!sfa.equals(other.sfa))
return false;
return true;
}
}
注:此为eclipse生成可能与idea生成的有所不同,但效果一样。
finalize
protected void finalize() throws Throwable :当垃圾回收器确定不存在
对该对象的更多引用时,由对象的垃圾回收器调用此方法。
clone
protected Object clone() throws CloneNotSupportedException:创建并
返回此对象的一个副本。“副本”的准确含义可能依赖于对象的类。
Cloneable:如果一个类想要实现clone()方法,那么此类需要实现了Cloneable接口,以示Object.clone()方法合法的进行对该类的按字段复制。
Cloneable是一个标记接口,表明实现该接口的类可以实现对象的复制。