JAVA中Object类中 有几个方法

Python014

JAVA中Object类中 有几个方法,第1张

protected Object clone()创建并返回此对象的一个副本。

boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。

protected void finalize()当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法

Class<?> getClass()返回此 Object 的运行时类。

int hashCode()返回该对象的哈希码值。

void notify()唤醒在此对象监视器上等待的单个线程

void notifyAll()唤醒在此对象监视器上等待的所有线程。

String toString()返回该对象的字符串表示。

void wait()在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。

void wait(long timeout)在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。

void wait(long timeout, int nanos)在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。

Java Object类是所有类的父类,主要方法有:

getClass():获取运行时类型,返回值为Class对象

2.hashCode():返回该对象的哈希码值,是为了提高哈希表的性能(HashTable)

3.equals():判断两个对象是否相等,在Object源码中equals就是使用==去判断,所以在Object中equals是等价于==的,但是在String及某些类对equals进行了重写,实现不同的比较。

4.clone():JAVA里除了8种基本类型传参数是值传递,其他的类对象传参数都是引用传递,我们有时候不希望在方法里讲参数改变,这是就需要在类中复写clone方法。此方法只实现了一个浅层拷贝,对于基本类型字段成功拷贝,对嵌套对象,只把地址拷贝了,需要自己重写clone方法进行深度拷贝。

5.toString():返回一个String字符串,用于描述当前对象的信息,可以重写返回对自己有用的信息,默认返回的是当前对象的类名+hashCode的16进制数字。

6.wait():多线程时用到的方法,作用是让当前线程进入等待状态,同时也会让当前线程释放它所持有的锁。直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,当前线程被唤醒

7.notify():多线程时用到的方法,唤醒该对象等待的某个线程

8.notifyAll():多线程时用到的方法,唤醒该对象等待的所有线程

9.finalize():对象在被GC释放之前调用finalize方法。

你明白了吗?

Java中所有类(包括用户自己定义的类)都自动继承Object类,即Object类是所有类的父类。

Object中常用方法:

public boolean equals(Object obj)

比较当前对象与obj是否为同一对象,返回值:ture/false

public String toString()

返回当前对象的字符串表达形式

public native int hashCode();

返回对象的Hash码。Hash码是标志对象的唯一值,Hash码相同的对象是同一对象

protected void finalize()throws Throwable

对象销毁时被调用

以下三个函数用于控制线程

public final native void notify();public final native void notifyAll();public final native void wait();

native型方法指由C++语言编写的方法,Java解释器对其进行转义后才执行。

“==”与equals()

"==" 一般用于基本数据类型比较。若用作两个引用对象比较,仅当引用变量引用同一个对象时,才返回true,否则false。

void EqualCompare()

{

String s1 = new String("Hello")

String s2 = new String("Hello")

String s3 = "Hello"

String s4 = "Hello"

//未使用new,s4引用既存的对象(编译器创建对象之前先进行检测"Hello"是否已经存在,若存在,则返回原对象的引用)

System.out.println(s1.equals(s2))// true x1行

System.out.println(s1 ==s2)// false 两变量引用不同对象

System.out.println(s3.equals(s4))//true 两变量引用相同对象

System.out.println(s3 ==s4)// true 两变量引用相同对象

}

比较对象时,一般用equal()方法。

Object类方法定义:public boolean equals(Object obj){ return (this == obj)}

不同的类可方便的对该对象进行覆盖。String类就覆盖了Object类的equals()方法,所以x1行输出true.

a==b 如果a,b引用同一对象,则返回true;

a.equals(b) 如果a对象内容和b对象内容相同,则返回true

如果未重载equals()方法的类对象使用该方法与另一个对象进行比较,则调用Object的equals()方法,仍然是对象的比较,返回值为false。