Object类
A.所属包
java.lang
B.声明
public class Object
C.概述
是所有类的父类
D.构造方法:
Object()
E.常用成员方法
a.protected Object clone()
创建并返回该对象的一个副本,需要实现Cloneable接口重写此方法
b.public boolean equals(Object obj)
判断两个对象地址值是否相等,如果子类想要判断内容是否相等需要重写此方法
c.protected void finalize()
当垃圾回收器确定不存在该对象的更多引用时,由对象的垃圾回收器调用此方法回收对象,但回收时间不确定
d.public Class<?> getClass()
返回该对象所在类的字节码文件对象
e.public int hashCode()
返回该对象的哈希码值
f.public String toString()
返回该对象的字符串表示,即:
this.getClass().getName()+”@”+Integer.toHexString(this.hashCode())
F.注意事项
a.Object类时所有类的父类
b.子类如果没有重写equals()方法默认比较的是地址值
c.直接输出一个对象名,其实默认是调用该对象所在类的toString()方法
d.==和equals的区别?
==用于基本类型是比较值,用于引用类型是比较地址值
euqals只能用于引用类型,默认比较地址值
e.关于hashCode()与equals()
1.如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等
2.如果两个对象不equals,但hashcode可能相等
3.如果两个对象hashcode相等,但不一定equals
4.如果两个对象hashcode不相等,肯定不equals
G.示例
class MyObject implements Cloneable//这里实现了Cloneable接口,重写了clone()方法
{
protected Object clone()
{
return this;
}
}
class MyObjectTest
{
public static void main(String[] args)
{
MyObject mobj1=new MyObject();
MyObject mobj2=new MyObject();
System.out.println(mobj1==mobj1.clone());//true
System.out.println(mobj1.equals(mobj2));//false
System.out.println(mobj1.hashCode());//697960108(每个人可能相同)
System.out.println(mobj1.toString());//object.MyObject@299a06ac(每个人可能不相同)
}
}