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构造函数
  • 相关阅读:
    MFC中L, _T(),TEXT,_TEXT区别以及含义
    Qt5完美解决 界面显示中文乱码
    TCP三次握手四次挥手详解
    TCP 长连接与短连接的区别
    Servlet 生命周期、工作原理
    Java反射的三种实现方式
    apache httpclient 4.5 兼容 http https
    mysql千万级大数据SQL查询优化
    Java String字符串补0或空格
    mysql存储过程
  • 原文地址:https://www.cnblogs.com/buptyuhanwen/p/9396411.html
Copyright © 2011-2022 走看看