zoukankan      html  css  js  c++  java
  • java基础---Object类方法:equals和==,toString()方法

    ---equals方法

    public boolean equals(Object obj)
    {
    return (this == obj);
    }
    比较的是地址,就是说object类的equals方法等同于==
     
    ---hashcode
    Object类的hashCode()方法为不同的对象返回不同的值,Object类的hashCode值表示的是对象的地址。
     
     
     
    ---equals和hashcode的关系:是一种规定
    两个对象相等 <=>  equals()相等  => hashCode()相等。因此,重写equlas()方法必须重写hashCode()方法,以保证此逻辑严格成立,同时可以推理出:hasCode()不相等 => equals()不相等 <=> 两个对象不相等。
    equals返回的是true和false
    1.当equals返回true,那么要求hashcode的返回值两个对象相同
    2.当equals返回false,hashcode可以相同可以不同。
    hashcode相等是更小的一个条件,equals是更大的条件,大条件成立
    要求小条件也成立。所以equals方法里面一定会用到hashcode()方法中的内容,比如说我
    用了name属性去计算hashcode,那么equals判断中必须也使用到name属性。
     
     
    ===为什么需要hashcode()方法?
    对象分布在散列表中,如果散列方法写得好,对象在表中的分布就会更加均匀,能够提高散列表的性能。
    提升hash表的性能。比如插入一个新的entry到hashmap中,如果没有hashcode用来计算插入
    位置,就得要遍历一遍,用equals判断是否有重复的键值。
    ================================================================
    默认的toString()
    public String toString()
    {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
    object返回类型@哈希值
    哈希值对于Object对象来说是内存地址,int类型toHexString转化为16进制无符号整数。
     
     
    ==============================================================
    clone方法必须实现cloneable接口,是protected类
    finalize()是没有实现的,为空。
     
     
     
    ==============================================================
    ===?
    ==运算符比较的到底是什么呢?==运算符作用在基本数据类型和作用在对象上有什么差别呢?
    ==符号比较的是值的大小
    对于基本数据类型来说,方法栈中有n和m两个引用,同时指向了方法栈这种的0,m,n存的都是0的地址,所以相同
    int n =0;
    int m=0;
    return n==m;//true
    比较基本数据类型的时候比较的是值的大小。
     
    对于对象来说,str_01和str_02的值是内存地址,但是这两个内存地址是不一样的,所以false
    String str_01 = new String("abc");
    String str_02 = new String("abc");
    return str_01==str_02;//false
    而作用在引用类型的时候比较的就是内存地址了。
     
    比价常量池里面的东西的时候
    String c = "abc";
    String d = "abc";
    System.out.println("c==d:" + (c==d));
    System.out.println("c.equals(d):"+c.equals(d));
    注意这里是常量池,也就是说两个引用同时都是指向了同一个内存区域。
     

    object类有十二种方法
     
    hashcode:对象的内存地址
    equals:比较对象是否相等,比较内存地址
    toString:返回类型名+hash地址
    getclass:获取类型
    clone:进行克隆
    finalize:垃圾回收
     
    wait(),wait(long),wait(long,int),notify(),notifyAll(),object构造函数
  • 相关阅读:
    Jupsh_flutter Android 收不到消息 / 排查不出请根据第 9 点说明提供信息
    angular表单 Dom获取表单值以及双向数据绑定
    angular中的组件以及组件中的模板合成
    Flutter开发的app进行设备判断是Ios还是android
    Java的封装
    GCD编程 之 略微提高篇
    多线程基础(六)GCD基础
    我遇到的CocoaPods的问题(也许后期会解决,持续更新)
    iOS之通过PaintCode快速实现交互动画的最方便方法 未解问题
    多线程基础(五)NSThread线程通信
  • 原文地址:https://www.cnblogs.com/buptyuhanwen/p/9396411.html
Copyright © 2011-2022 走看看