java.long.object类中的重要方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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方法的重写
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()); //8 11 System.out.println(num2.hashCode()); //8 12 } 13 }
3.wait()与sleep()
sleep是Thread类的一个方法,wait是Object类的一个方法。
sleep不会释放资源,wait会释放掉资源。
sleep不会释放资源,wait会释放掉资源。
以上是关于java.long.object类中的重要方法的主要内容,如果未能解决你的问题,请参考以下文章
5.线程的八大核心基础知识之Thread和Object类中的重要方法详解
Day275.Thread和Object类中的重要方法 -Juc