首页 > 代码库 > java.long.object类中的重要方法

java.long.object类中的重要方法

一:概念

java.long.object

Object类是所有Java类的祖先。每个类都使用 Object 作为超类。

二:方法概览

clone()
创建并返回此对象的一个副本。
equals(Object obj)
指示某个其他对象是否与此对象“相等”。
finalize()
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。(JVM中自带的垃圾回收机制只能回收new出的对象)
getClass()
返回一个对象的运行时类。
hashCode()
返回该对象的哈希码值。(默认下,Object中的hashCode() 返回对象的32位jvm内存地址。也就是说如果对象不重写该方法,则返回相应对象的32为JVM内存地址。)
notify()
唤醒在此对象监视器上等待的单个线程。
notifyAll()
唤醒在此对象监视器上等待的所有线程。
toString()
返回该对象的字符串表示。
wait()
导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。
wait(long timeout)
导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量。
wait(long timeout, int nanos)
导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量。
 
三:方法的具体使用
1.equals()与"=="
object类中,equals与"=="均默认为比较对象在JVM中的地址。因为equals就是由"=="实现的。(不同的引用必须指向同一对象)
//equals方法源码
public
boolean equals(Object obj){   return(this == obj);  }

 

String类中重写了equals方法:比较两个对象引用所指向的内容是否相等。(可指向不同对象,对象里的内容相同)
//String类中对equals方法的重写

public
boolean equals(Object anObject) { 2 if (this == anObject) { 3 return true; 4 } 5 if (anObject instanceof String) { 6 String anotherString = (String) anObject; 7 int n = value.length; 8 if (n == anotherString.value.length) { 9 char v1[] = value;10 char v2[] = anotherString.value;11 int i = 0;12 while (n-- != 0) {13 if (v1[i] != v2[i])14 return false;15 i++;16 }17 return true;18 }19 }20 return false;21 }

 

2.equals()与hashcode()
equals()和hashCode()方法是用来在同一类中做比较用的,尤其是在容器里如set存放同一类对象时用来判断放入的对象是否重复。
equals()相等的两个对象,hashcode()一定相等,equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。
当equals方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
//String类中对hashcode()方法的重写public int hashCode() { 2     int h = hash;    //Default to 0 ### String类中的私有变量, 3     if (h == 0 && value.length > 0) {    //private final char value[]; ### Sting类中保存的字符串内容的的数组 4         char val[] = value; 5  6         for (int i = 0; i < value.length; i++) { 7             h = 31 * h + val[i]; 8         } 9         hash = h;10     }11     return h;
12 }
//没有重写hashCode方法的类,直接返回32位对象在JVM中的地址;Long类重写了hashCode方法,返回计算出的hashCode数值public class ComHashcode{ 2     public static void main(String[] args) throws Exception { 3         ComHashcode a = new ComHashcode(); 4         ComHashcode b = new ComHashcode(); 5         System.out.println(a.hashCode());    //870919696 6         System.out.println(b.hashCode());    //298792720 7          8         Long num1 = new Long(8); 9         Long num2 = new Long(8);10         System.out.println(num1.hashCode());    //811         System.out.println(num2.hashCode());    //812     }13 }

 3.wait()与sleep()

 sleep是Thread类的一个方法,wait是Object类的一个方法。
 sleep不会释放资源,wait会释放掉资源。

java.long.object类中的重要方法