Object类相关问题

  1. hashcode的作用
    1. 向Set集合中插入的时需要判断是否存在该元素,可以通过equals方法。但是如果元素太多,用这样的方法就会比较慢,因此产生hashCode方法,采用哈希算法来提高集合中查找元素的效率。
    2. 哈希算法将集合分成若干个存储区域,每个对象可以计算出一个哈希码,可以将哈希码分组,每组分别对应某个存储区域,根据对象的哈希码就能确定该对象应该存储的那个区域。
    3. hashCode方法可以这样理解:它返回的就是根据对象的内存地址换算出的一个值。当Set集合要添加新的元素时,先调用这个元素的hashCode方法,就能定位到它应该放置的物理位置。如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较;如果这个位置上已经有元素,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。
  2. equals方法和hashCode方法重写问题

    1. 现实逻辑是两个对象存在部分属性相同就认为是同一个对象,要求调用equal方法要返回ture,因此hashCode方法也必须true。
    2. java规定:(1)如果两个对象相同(equals 方法返回 true),那么它们的 hashCode 值一定要相同;(2)如果两个对象的 hashCode 相同,它们并不一定相同。当然,未必要按照要求去做,但是如果违背了上述原则,就会发现在使用容器时,相同的对象可以出现在Set集合中,同时增加新元素的效率会大大下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)。
    3. 重写了equals方法必将重写hashCode方法
  3. equals方法和"=="的区别

    1. equals方法是Object类的方法,"=="是运算符;
    2. equals方法用于判断引用类型引用的值是否相等,"=="运算符用于比较基本类型变量的值是否相等
    3. "=="用于比较引用类型时,当引用的地址相同并且存的值相同,结果才为true,java中的引用类型没有实现"=="运算符。
    4. == 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。1、比较的是操作符两端的操作数是否是同一个对象。2、两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。3、比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为true,如:int a=10 与 long b=10L 与 double c=10.0都是相同的(为true),因为他们都指向地址为10的堆。
    5. equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。
  4. new和clone方法的区别是什么?

    1. 都是java中创建对象的方式。new关键字创建对象会调用类的构造方法,clone方法创建对象是对原有对象的拷贝。
    2. new是java中的关键字,clone是java中超类Object类的方法。
    3. clone方法是对原有对象的副本,新对象的属性初始化在拷贝过程中完成;new关键字在创建对象是新对象,调用new时会申请jvm内存用于创建新对象,并调用构造方法初始化对象。
  5. 类继承

    1. 参考链接

 

posted @ 2023-02-25 16:34  雨也飘柔  阅读(11)  评论(0)    收藏  举报