java-object类介绍
java中object类是所有类的基类,它位于java.lang包中。Object类没有定义属性,12个方法,如下:
java.lang Object
是每一个类的根类,每个类都直接或间接的继承Object类。 子类的构造方法默认访问的是父类的无参构造方法
public final Class getClass()
返回Object运行时类。也就是说是字节码文件对象。
// getClass方法会返回一个Class类的实例对象,然后调用Class类的getName()方法
Person s = new Person();
System.out.println(s.getClass().getName());
//com.***.***.Person(返回全路径名包名+类名)
protected Object clone()
clone函数返回的是一个引用,指向的是新的clone出来的对象,此对象与原对象分别占用不同的堆空间。
clone详解看了一个链接: https://blog.youkuaiyun.com/zhangjg_blog/article/details/18369201#0-qzone-1-28144-d020d2d2a4e8d1a374a433f596ad1440
public boolean equals(Object obj)
==和equals的区别见下面
String类重写了equals方法,所有String.equals可以比较两个字符串内容是否相等。 equlas()方法的正确理解应该是:判断两个对象是否相等。那么判断对象相等的标尺又是什么?
如上,在object类中,此标尺即为==。当然,这个标尺不是固定的,其他类中可以按照实际的需要对此标尺含义进行重定义。如String类中则是依据字符串内容是否相等来重定义了此标尺含义。如此可以增加类的功能型和实际编码的灵活性。当然了,如果自定义的类没有重写equals()方法来重新定义此标尺,那么默认的将是其父类的equals(),直到object基类。
public int hashCode()
hashCode()方法返回一个整形数值,表示该对象的哈希码值。 如果两个对象用equals判断相等,那么这两个对象的哈希码也相等;反之两个对象的哈希码相等,equals比较却不一定相等。
public String toString()
Object中实现代码如下:
public String toString(){
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
getClass()返回对象的类对象,get;ClassName()以String形式返回类对象的名称(含包名)。Integer.toHexString(hashCode())则是以对象的哈希码为实参,以16进制无符号整数形式返回此哈希码的字符串表示形式。
wait():
调用此方法所在的当前线程等待,直到在其他线程上调用此方法的主调(某一对象)的notify()/notifyAll()方法。
wait(long timeout)/wait(long timeout, int nanos):
调用此方法所在的当前线程等待,直到在其他线程上调用此方法的主调(某一对象)的notisfy()/notisfyAll()方法,或超过指定的超时时间量。
notify()/notifyAll()
唤醒在此对象监视器上等待的单个线程/所有线程。
protected void finalize():
空实现,jvm对内存空间进行垃圾回收时会调用此方法
==和equals的区别
1:对于基础数据类型来(byte、short、int、String、char、float、double、boolean)说,比较相等使用 == 号
2:对于引用数据类型(类、接口、数组),分3种情况
(1)== 始终比较的是两个变量的地址
(2)Object类的equals方法,比较的也是两个变量的地址
boolean equals(Object o2){
return this == o2;
}
(3)java.util.String类重写了从父类Object继承过来的equals方法,
比较两个字符串的内容是否完全相等,所有String.equals可以比较具体内容。
总结成一句话:对于引用数据类型来说,==和equals都是来比较两个变量的地址,