Object类的概述

 

Object类的概述

    类层次结构的根类

    所有类都直接或者间接的继承自该类

构造方法

public Object()

子类的构造方法默认访问的是父类的无参构造方法因为object类只有空参构造方法

Object类的hashCode()方法

     public int hashCode()

     a:返回该对象的哈希码值。默认情况下,该方法会根据对象的地址值来计算。

     b:不同对象的,hashCode()一般来说不会相同。但是,同一个对象的hashCode()值肯定相同。

hashCode()是个抽象方法,native(本地)修饰符修饰是借助本地系统资源帮我们计算的hashCode,现在jvm是在window系统中运行的,就会借助window系统计算hashCode

案例:

         

  1. package com.itkailing.object;
  2.  
  3. import com.itkailing.bean.Student;
  4.  
  5. public class Demo1_HashCode {
  6.     public static void main(String[] args) {
  7.         // 创建Object类型的对象object
  8.         Object object = new Object();
  9.  
  10.         int hashCode = object.hashCode();
  11.         System.out.println(hashCode);
  12.  
  13.         Student s1 = new Student("张三", 23);
  14.         Student s2 = new Student("李四", 24);
  15.         System.out.println(s1);
  16.         System.out.println(s2);
  17.  
  18.     }
  19. }

     

       

    Object类的getClass()方法

         public final Class getClass()

         a:返回此对象的运行时类。

         b:可以通过Class(小写的class是关键字.C大写的Class是个类)中的一个方法,获取对象的真实类的全名称。    (返回Class,Class接受) Class clazz=s.getC =]=lass();

             public String getName()

            小写的class是用来描述类的信息的(属性和行为)

            大写的Class是用来描述编译后生成的字节码文件的(.class文件)

    Object类的toString()方法

         public String toString()

         a:返回该对象的字符串表示。

         b:它的值等于: 

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

    查看源码如下

    1. 源码如下:
    2.      public String toString() {
    3.            return getClass().getName() + "@" + Integer.toHexString(hashCode());
    4.        }

    通过源码看出,返回的结果:

    @符号前是给对象所属类的全名称,

    @符号后面是该对象hashCode值的十六进制的字符串表现形式

    : 全类名 @ 该对象hashCode值的十六进制的字符串表现形式

     

    : System.out.println(student); //直接打印对象的引用,默认调用toString方法

     

    重写toString()方法

    在实际使用时直接打印出类全名称@ hashCode值的十六进制的字符串表现形式,是没有意义的,经常我们是想看到对象的具体的详细信息,这样就需要子类重写父类的toString方法

    1.    public String toString() {
    2.       return "Student [name=" + name + ", age=" + age + "]";
    3.    }
    4. }

    :eclipse自动生成,alt+shift+s ->s->enter

    Object类的equals()方法

     

         a:指示其他某个对象是否与此对象"相等"(判断两个对象是否相等) 

         b:默认情况下比较的是对象的引用是否相同。

         c:由于比较对象的引用没有意义,一般建议重写该方法。

    查看源码

    1. 源码
    2.      public boolean equals(Object obj) {
    3.            return (this == obj);//是调用的对象与传入的对象的比较,比较的是地址值
    4.       }
    5. 底层还是==号

     

    案例:

    1. import com.itkailing.bean.Student;
    2. public class Demo4_Equals {
    3.    public static void main(String[] args) {
    4.       //观察重写equals方法前后的结果
    5.       Student s1 = new Student("张三",23);
    6.       Student s2 = new Student("张三",23);
    7. //当Student类没有重写equals方式时,下面两个输出都是false
    8.       boolean b = s1.equals(s2); //比较两个对象是否相等
    9.       System.out.println(s1 == s2);
    10.       System.out.println(b);
    11.    }
    12. }

     

    重写Student类中的equals方法:

    1.    @Override
    2. 重写equals方法
    3.    public boolean equals(Object obj) {
    4.       if(obj instanceof Student){
    5.          Student s = (Student)obj;
    6.          return this.name.equals(s.name)&&this.age==s.age;
    7.       }
    8.       return false;
    9.    }
    10. }

    ==号和equals方法的区别

        ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值

        equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性

    equals底层依赖的是==

posted @ 2017-02-17 00:59  凯玲之恋  阅读(321)  评论(0)    收藏  举报