码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-09-17 17:41:20      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

一:概念

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());    //8
11         System.out.println(num2.hashCode());    //8
12     }
13 }

 3.wait()与sleep()

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

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

标签:

原文地址:http://www.cnblogs.com/nomorelies/p/5879250.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!