黑马程序员--03.Java面向对象--09.【Object类】

来源:互联网 发布:长春java毕业生工资 编辑:程序博客网 时间:2024/05/18 03:14

Java面向对象--9

      Object类

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

1.    Object

1). Object类的基本特点

(1). Object类在Java整个继承体系中的位置

[1]. Object位于整个Java继承体系的根节点。

[2]. 所有的类直接或者间接继承了这个类

===>所有的类都具有Object类中定义的属性方法

[3]. 有的时候,尽管没有写一个类具体继承哪个类,这个类也会默认继承Object类。

默认继承指的就是某个类不通过关键字extends就可以继承Object这个类。

(2). Object类的构造方法

查询Object类的源码可知:Object类中没有显式构造方法。这样可以推断出,JVM会为Object添加上一个默认的空参构造方法。public Object(){}

【注意】由于Object是所有类的根父类,Object类中的第一行没有super()语句

2).Object类的常用方法

(1). equals()方法

[1]. equals()方法的作用:Java认为所有的对象都具有比较性,都可以比较两个对象是否相同

[2]. equals()方法的源码

public boolean equals(Object obj) {

       return (this== obj);

}

所以:原生的Object的equals方法是***调用比较运算符==***比较两个对象的地址是否一致。

[3]. equals()方法的参数:是Object类本身的引用

由于equals(Object obj)参数来的事根父类Object的引用 obj, 所以Object类的对象可以和任意类的对象进行比较。比较的是二者的地址值是否一致。

【注意】:单纯比较两个对象的地址没有意义的,所以子类经常重写Objectequals方法来进行根据特殊条件进行对象的比较。

[4]. 子类重写Object类的equals方法需要注意的事项

重写的时候一定要注意equals方法的参数是Object obj类型的引用变量。绝对不可以其他类型的变量。因为这样的话,和父类Object的equals方法名相同,但是参数列表不同,javac认为是重载。当底层方法真的要调用equals方法的时候,不会调用你重载的equals方法,使得原本打算重载的equals方法失去了意义。

public boolean equals(Demo d){ //错误的重写!!!

}

这样不是重写Object类的方法,一旦这样写完,底层调用不到这个重写的

public boolean equals(Object obj){//正确的重写

}

(3). hashCode()方法

[1]. hashCode()方法的作用:每个对象都有自己的内存地址值,可以映射为Hash码。Java中用hashCode()方法获取对象在内存中映射的哈希码。

[2] hashCode()方法的源码

public nativeint hashCode();

这个方法是一个本地化方法,用native关键字来修饰。这个方法要调用操作系统底层的代码。分配内存地址是有OS来决定的。所以是本地化方法,看不到里面的源码。

(2). toString()方法

[1]. toString()方法的作用:打印这个对象的hash码值和类名

[2]. toString()方法的源码:

public String toString() {

    return getClass().getName() +"@" + Integer.toHexString(hashCode());

}

{1}. hashCode()返回的是哈希码的十进制值,这里面将其转化为十六进制的字符串。

{2}. Object的toString返回值是getClass()和hashCode()拼接出来的

----------- android培训、java培训、java学习型技术博客期待与您交流! ------------

 

原创粉丝点击