• Java常用类--------Object类


    Object类:

    java.lang.Object是Java语言中一切类的父类,也就是继承结构中的最顶层,该类中定义了一些公共的方法,这些方法可以被任何一个对象所调用。

    如下所示:
    在这里插入图片描述
    举例:

    public class sunday {
        public static void main(String[] args){
            Object obj1=new Object();
            Object obj2=new Object();
            //直接输出和调用toString方法都可以打印对象
            System.out.println(obj1);
            System.out.println(obj1.toString());
            System.out.println(obj2);
            System.out.println(obj2.toString());
            System.out.println("obj1和obj2是否相等?"+(obj1==obj2));
            System.out.println("obj1和obj2是否相等?"+obj1.equals(obj2));
            System.out.println("obj1的哈希码是:"+obj1.hashCode());
            System.out.println("obj2的哈希码是:"+obj2.hashCode());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    输出:

    java.lang.Object@16b98e56
    java.lang.Object@16b98e56
    java.lang.Object@7ef20235
    java.lang.Object@7ef20235
    obj1和obj2是否相等?false
    obj1和obj2是否相等?false
    obj1的哈希码是:381259350
    obj2的哈希码是:2129789493
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    注:

    "=="运算符和equals()方法是等价的,都是用来比较两个对象的引用是否相等,如果两个对象的引用是相等的,那么这两个对象一定相等,适用于所有的类,因为在Java中的object类是所有类的“祖宗”,所有的类都继承了它有的属性和方法。

    在任何一个没有重写equals方法的类里,且它的父类除object外都没有写,那么"= ="和equals是等价的,我们在比较该类对象的时候就是调用Object类的equals方法,也就是用“==”运算符比较两个对象,如果该类不重写hashcode()方法,那么这个类的不同对象都具有不同的哈希码。

    但如果非要重写hashcode()方法,需要保证以下几点:

    <1>在程序运行期间,只要对象的字段变化,不会影响equals方法的决策结果,那么在这个期间,无论调用多少次hashcode(),都必须返回同一个散列码。

    原因:散列码是用来把一堆对象散列到自己各自的队列中去的一种标识码,如果通过equals比较出来的这两个对象是相等的,那么这两个对象的地址是相同的,地址相同的对象,他们的散列码一定相同。

    <2>通过equals()调用返回true的两个对象的hashcode()方法的返回值也一定相同。

    <3>通过equals()方法返回false的两个对象的hashcode()方法的返回值可以相同。

    注意:

    <1>一般情况下在定义类时,都会重写toString()方法,在打印该类对象时,方便看到对象的相关属性值信息。

    <2>“==”运算符左右两边是基本数据类型,就是比较两个值是否相等;如果是引用数据类型,就是比较两个引用是否指向同一内存地址。

    <3>在定义类时,可以重写equals()方法,重新定义对象的比较逻辑,同时也要重写hashcode()方法。

    原因:

    如果只重写equals方法,不重写hashcode时,违反规定:equals相等的对象必须具有相等的哈希码(因为 hashcode的返回值还是按照Object类的规范:同一对象的hashcode值相同)

  • 相关阅读:
    【科研数据处理】[实践]类别变量频数分析图表、数值变量分布图表与正态性检验(包含对数正态)
    直播互动流程
    Thread类的常用方法
    计算机毕业设计Java济南旅游网站(源码+系统+mysql数据库+lw文档)
    Dubbo 配置注意事项
    第五届安洵杯网络挑战赛WP
    Python 中 key 参数的含义及用法
    Redis key基本使用
    C++设计模式02-——策略设计模式
    3-FreeRTOS任务和协程
  • 原文地址:https://blog.csdn.net/m0_64365419/article/details/127484863