一些JAVA基础知识

95 阅读2分钟
  1. 重写(Override)

存在于继承体系中,指子类实现了一个与父类在方法声明上完全相同的一个方法。

为了满足里式替换原则,重写有以下两个限制:

  • 子类方法的访问权限必须大于等于父类方法;
  • 子类方法的返回类型必须是父类方法返回类型或为其子类型。

使用 @Override 注解,可以让编译器帮忙检查是否满足上面的两个限制条件。

  1. 重载(Overload)

存在于同一个类中,指一个方法与已经存在的方法名称上相同,但是参数类型、个数、顺序至少有一个不同。

应该注意的是,返回值不同,其它都相同不算是重载。

3.equals() 与 ==

  • 对于基本类型,== 判断两个值是否相等,基本类型没有 equals() 方法。
  • 对于引用类型,== 判断两个变量是否引用同一个对象,而 equals() 判断引用的对象是否等价。
  • 总结一句话就是:equals比较的是对象的内容,==比较的是对象的地址。

4.为什么要重写hascode 主要是运用到Key-Value集合中时,比如HashMap/HashTable/HaspSet, 将对象作为Key保存到集合中,在以“相等的”(equals()返回true)的另一个对象作为Key去查询对应的数据时, 根本找不到,为什么?

(1).因为对象没有重写hashCode()方法,使用是Object默认的hashCode()方法,导致对象内容一致但是地址不一样。

(2).Java API文档中关于hashCode方法有以下几点规定:

在java应用程序执行期间,如果在equals方法比较中所用的信息没有被修改,那么在同一个对象上多次调用hashCode方法时必须一致地返回相同的整数。如果多次执行同一个应用时,不要求该整数必须相同。

如果两个对象通过调用equals方法是相等的,那么这两个对象调用hashCode方法必须返回相同的整数。

如果两个对象通过调用equals方法是不相等的,不要求这两个对象调用hashCode方法必须返回不同的整数。但是程序员应该意识到对不同的对象产生不同的hash值可以提供哈希表的性能。