×

Java总结篇系列:java.lang.Object

前端技术网 前端技术网 发表于2024-01-18 14:44:30 浏览3501 评论0

抢沙发发表评论

一、java.lang.object的实现方法有哪些

Java.lang.object类中有几个方法不是final的,我们会经常用重写它们,

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

Java总结篇系列:java.lang.Object

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

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

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

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

1、clone()

我们为什么要用clone()?

Java总结篇系列:java.lang.Object

当我们需要一个与某个对像时一模一样的对像时,但它们又是相互独立的,对它们各自的操作不会影响到另外的一个,这时候用clone()就可以

实现,当然,其他的方法也可以实现,但是重写clone()简单,高效

有一个不没重写clone()的例子,能帮助我们更好的去理解clone(),如下:

public class Test

{

public static void main(String[] args){

A a1=new A();

A a2=new A();

a1.name="a1";

a2=a1;

a2.name="a2";

System.out.println("a1.name="+a1.name);

System.out.println("a2.name="+a2.name);

}

}

class A

{

public String name;

}

输出结果为:a1.name=a2;

a2.name=a2;

下面这个是重写了clone()的例子

public class Test

{

public static void main(String[] args) throws CloneNotSupportedException{

A a1=new A();

A a2=new A();

a1.name="a1";

a2=(A) a1.clone();

a2.name="a2";

System.out.println("a1.name="+a1.name);

System.out.println("a2.name="+a2.name);

}

二、Java语言中Object类定义了哪11种方法

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));//truex1行

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。

三、java.lang.object的补充

Java语言规范要求equals方法具有下面的特点:

自反性:对于任何非空引用值 x,x.equals(x)都应返回 true。

对称性:对于任何非空引用值 x和 y,当且仅当 y.equals(x)返回 true时,x.equals(y)才应返回 true。

传递性:对于任何非空引用值 x、y和 z,如果 x.equals(y)返回 true,并且 y.equals(z)返回 true,那么 x.equals(z)应返回 true。

一致性:对于任何非空引用值 x和 y,多次调用 x.equals(y)始终返回 true或始终返回 false,前提是对象上 equals比较中所用的信息没有被修改。

对于任何非空引用值 x,x.equals(null)都应返回 false。

从这里看出,上面的例子是Java规范的equals方法的标准实现,推荐用上面例子的写法实现类的equals方法。

四、java.lang.object的方法使用说明

1、equals()方法:用于测试某个对象是否同另一个对象相等。它在Object类中的实现是判断两个对象是否指向同一块内存区域。这种测试用处不大,因为即使内容相同的对象,内存区域也是不同的。如果想测试对象是否相等,就需要覆盖此方法,进行更有意义的比较。例如

class Employee{

...//此例子来自《java核心技术》卷一

public boolean equals(Object otherObj){

//快速测试是否是同一个对象

if(this== otherObj) return true;

//如果显式参数为null,必须返回false

if(otherObj== null) reutrn false;

//如果类不匹配,就不可能相等

if(getClass()!= otherObj.getClass()) return false;

//现在已经知道otherObj是个非空的Employee对象

Employee other=(Employee)otherObj;

//测试所有的字段是否相等

return name.equals(otherName)

&& salary== other.salary

&& hireDay.equals(other.hireDay);

}

}

END,本文到此结束,如果可以帮助到大家,还望关注本站哦!