• JAVA_SE基础——60.初识Object


    java是面向对象的语言,核心思想:找适合 的对象做适合 的事情:

    方式一:自定义类,然后通过自定义的类创建对象。

    方式二:sun提供了很多的类给我使用,我们只需要认识这些类,我们就可以通过这些类创建对象了。

    Object类是所有类的终极父类。 任何一个类都继承了Object类。

     Object:所有类的根类。
        Object是不断抽取而来,具备着所有对象都具备的共性内容。

    class Person{
          private int age ;
          Person(int age){
                 this.age = age;
          }
    }
    
    class Demo{
    }
    
    class ObjectDemo{
           public static void main(String[] args){
                Person p1 = new Person(20);
                Person p2 = new Person(20);
                Person p3 = p1;
          
                Demo d = new Demo();
    
                System. out.println(p1 == p2);//false
                System. out.println(p1.equals(p2));//false
                System. out.println(p1.equals(p3));//true
                System. out.println(p1.equals(d));//false
          }
    }
    运行结果:

    false
    false
    true
    false


    上面都是比较内存地址,而没有比较年龄,然而需要比较年龄则需要重写equals方法~

    P.S.
        ==以及Object类的equals方法默认都是根据对象的哈希值判断两个对象是否相等。
        可以通过覆盖Object的equals方法来重写比较规则。

    class Person{
           private int age ;
           Person( int age){
                 this.age = age;
           }
           //比较Person的年龄,是否是同龄人
           //一般都会覆盖此方法,根据对象的特有内容,建立判断对象是否相同的依据。
           public boolean equals(Object obj){
                 if(!(obj instanceof Person))
                       throw new ClassCastException("类型错误");
                 Person p = (Person)obj;
                 return this .age == p.age;
          }
    }
    
    class ObjectDemo{
           public static void main(String[] args){
                Person p1 = new Person(20);
                Person p2 = new Person(20);
    
                System. out.println(p1.equals(p2));
          }
    }
    
    运行结果:

    ture

    class Person{
          private int age ;
          Person(int age){
                 this.age = age;
          }
          public int hashCode(){
                 return age ;
          }
    }
    
    class ObjectDemo{
           public static void main(String[] args){
                Person p1 = new Person(20);
    
                System. out.println(p1);
                System. out.println(p1.getClass().getName() + " $ " + Integer.toHexString(p1.hashCode()));
          }
    }
    
    运行结果:

    Person@21

    Person $ 21

    System. out.println(p1.getClass().getName() + " $ " + Integer.toHexString(p1.hashCode()));
    为了方便初学者理解上面的代码,接下来分别对其中用到的方法进行解释,具体如下:

    1.getClass().getName()代表返回对象所属类的类名,即是Person。

    2.hashCode()代表返回该对象的哈希值。 (也可以把哈希码理解成是对象的内存地址)

    3.Integer.toHexString(p1.hashCode())代表将对象哈希值用16进制表现。

    其中,hashCode()是Object类中定义的一个方法,这个方法将对象的内存地址进行哈西运算,返回一个int型的哈希值


    toString() : 返回该对象的字符串表示,返回一个字符串用于描述该对象的。 (返回的字符串表示: 完整类名+@+ 对象的哈希码)



    交流企鹅:654249738,和自学者交流群:517284938

  • 相关阅读:
    完全背包
    01背包
    游戏编程:为什么C++游戏开发比Java更好,其实是因为这两个点!
    VS code搭建 C 和 C++ 环境的完整图文教程!赶紧收藏,这波不亏!
    来自清华计算机系的招聘信息,第一个要求就劝退99%的人!网友:但福利待遇真好!
    C++ 必看书籍清单!从C++ Primer 到 源码剖析,精通真的很难!
    C语言简单编程速成!保姆级入门教程, 目标达成!
    9 名程序员被抓!这次是真的活该.....
    你知道各类开发语言的薪酬差距吗?高薪在于适合,而不在于广度!
    apache common包 CollectionUtils 使用 详解
  • 原文地址:https://www.cnblogs.com/Jhaiha0/p/8465281.html
Copyright © 2020-2023  润新知