8 hashCode和equals方法的关系
hashCode的作用是获取哈希码,也称为散列码:它实际上是返回一个int整数这个哈希码的作用是确定该对象在哈希表中的索引位置
equals它的作用是判断两个对象是否相等,如果对象重写了equals方法,比较两个对象的内容是否相等:如果没用重写,比较两个对象的地址是否相同,价于“==”。
hashCode是为了提高在散列结构存储中的效率,在线性表中没有作用。 equals和hashCode需要同时覆盖
若两个对象equals返回true,则hashCode有必要也返回相同的int数
若两个对象equals返回false则hashCode不一定返回不同的int数,但为不相等的对象生成不同hashCode值可以提高哈希表的性能。
若两个对象hashCode返回相同int数,则equals不一定返回true.若两个对象hashCode返回不同int数,则equals一点返回false。
9、抽象类和接口的区别
抽象类是用来捕捉子类的通用特性的。它不能被实例化,只能被用作子类的超类。抽象类被用来创建继承层级里子类的模板
接口是抽象方法的集合,如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。
抽象类可以有构造方法、普通成员变量、静态方法,接口中不能有构造方法、普通成员变量、静态方法。
一个类可以实现多个接口,但接口只能继承一个抽象类
接口更多的是在系统架构设计方法发挥作用,主要是用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用。
10、自动装箱与拆箱
装箱就是自动将基本数据类型转换为包装器类型,拆箱就是自动将包装器类型转换为基本数据类型
装箱操作回创建对象,频繁的装箱操作会消耗许多内存,影响性能,所以可以避免装箱的时候应该尽量避免
equals(Objecto)因为原equals方法中的参数类型是封装类型,所传入的参数类型(a)是原始数据类型,所以会自动对其装箱,反之,会对其进行拆箱
当两种不同类型用==比较时,包装器类的需要拆箱,当同种类型用==比较时,会自动拆箱或者装箱。