课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
昆明达内培训的小编这一期给大家分享Java的object类。
一、概述
Object类是所有Java类的祖先。每个类都使用Object作为超类。所有对象(包括数组)都实现这个类的方法。
二、object类中的方法
1、equals
判断两个对象是否相等
2、hashCode()
返回该对象的哈希码值。
3、getclass()
返回此Object的运行时类。
4、clone()
创建并返回此对象的一个副本。
三、方法详解
1、equals()
自反性(reflexive):对于任何非空引用值x,x.equals(x)都应返回true。
对称性(symmetric):对于任何非空引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)才应返回true。
传递性(transitive):对于任何非空引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)返回true,那么x.equals(z)应返回true。
一致性(consistent):对于任何非空引用值x和y,多次调用x.equals(y)始终返回true或始终返回false,前提是对象上equals比较中所用的信息没有被修改。
对于任何非空引用值x,x.equals(null)都应返回false。
Object类的equals方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值x和y,当且仅当x和y引用同一个对象时,此方法才返回true(x == y具有值true)。
注意:当此方法被重写时,通常有必要重写hashCode方法,以维护hashCode方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
以上特性,在进行equals方法的重写时,一定要遵守,否则容易出现一些意想不到的问题。
2、hashcode()
返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable提供的哈希表。
hashCode的常规协定是:
在Java应用程序执行期间,在同一对象上多次调用hashCode方法时,必须一致地返回相同的整数,前提是对象上equals比较中所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
如果根据equals(Object)方法,两个对象是相等的,那么在两个对象中的每个对象上调用hashCode方法都必须生成相同的整数结果。
以下情况不是必需的:如果根据equals(java.lang.Object)方法,两个对象不相等,那么在两个对象中的任一对象上调用hashCode方法必定会生成不同的整数结果。但是,程序员应该知道,为不相等的对象生成不同整数结果可以提高哈希表的性能。
实际上,由Object类定义的hashCode方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是JavaTM编程语言不需要这种实现技巧。)
3、getclass()
返回此Object的运行时类。返回的Class对象是由所表示类的static synchronized方法锁定的对象。
4、clone()
创建并返回此对象的一个副本。“副本”的准确含义可能依赖于对象的类。这样做的目的是,对于任何对象x,表达式:
x.clone() != x
为true,表达式:
x.clone().getClass() == x.getClass()
也为true。
昆明达内培训的小编知道Object类的clone方法执行特定的复制操作。首先,如果此对象的类不能实现接口Cloneable,则会抛出CloneNotSupportedException。注意,所有的数组都被视为实现接口Cloneable。否则,此方法会创建此对象的类的一个新实例,并像通过分配那样,严格使用此对象相应字段的内容初始化该对象的所有字段;这些字段的内容没有被自我复制。所以,此方法执行的是该对象的“浅表复制”,而不“深层复制”操作。
Object类本身不实现接口Cloneable,所以在类为Object的对象上调用clone方法将会导致在运行时抛出异常。