Java面试前知识点总温习
办法的重载与笼罩
重载:
一个类中能够定义多个办法名雷同,但参数不同的办法。调用时,会依据不同的参数主动匹配对应的办法。
重载的办法,理论是齐全不同的办法,只是名称雷同而已
办法重载条件:形参的类型,形参的参数,形参的程序不同。
笼罩(重写):
子类通过重写父类的办法,能够用本身的行为替换父类的行为。
办法的重写是实现多态的重要条件。
办法重载条件:
- 办法名,形参列表雷同
- 返回值类型和申明异样类型,子类小于父类
- 拜访权限,子类小于父类
toString()办法
Object类中定义有 public String toString() 办法,源码如下:
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode());}
默认会返回 类名 + @ + hashCode。
在打印对象对象时,会主动调用该对象的toString()办法。
==、equals()办法、hashCode()办法
==
== 代表比拟单方是否雷同。如果是根本类型则比拟值是否相等。如果是援用类型则比拟地址是否相等,即是否是同一个对象。
equals()办法
equals()办法在Object类中的定义如下:
public boolean equals(Object obj) { return (this == obj); }
很显著是对两个对象的地址进行比拟。
而String,Integer,Double这些封装类在应用equals()办法时,曾经笼罩了Object类的equals()办法,进行内容的比拟。
当equals()办法被笼罩时,hashCode()也要被笼罩。
hashCode()办法
- 在一个Java利用执行期间,如果一个对象提供给equals()办法做比拟的信息没有被批改的话,该对象屡次调用hashCode()办法,该办法必须始终如一返回同一个hashcode值。
- 如果两个对象依据equals()办法是相等的,那么调用两个对象各自的hashCode()办法必须产生同一个hashcode值。
- 不要求依据equals()办法不相等的两个对象,调用各自的hashCode()办法肯定产生不同的hashcode值。
hashcode作用
想要明确hashcode的作用,必须先晓得Java中的汇合。Java中的汇合有两类,一类是List,一类是Set。前者汇合内是有序的,元素能够反复;后者元素无序,但元素不能够反复。
判断元素是否反复须要用equals()办法,然而元素过多时,须要屡次调用equals()办法。会升高效率。
此时先计算hashcode定位一个地位,如果这个地位没有元素,它就能够间接贮存在这个地位,不必再进行比拟;如果有元素,就调用它的equals()办法与新元素比拟,雷同就不存了。这样理论调用equals()办法的次数就大大降低了。
简而言之:在汇合查找时,hashcode能大大降低对象比拟次数,进步查找效率。
equlas()办法后果为true的对象必须有雷同的hashcode
如果两个对象A和B的equals()为true,但后果不同,则A和B存入HashMap时计算的HashMap外部数组的索引地位可能不能。那么A和B可能同时存入HashMap,而HashMap中不容许寄存反复元素。
String、常量池、StringBuffer、StringBuilder
String
String类又称不可变字符序列
- 为了节俭内存,JVM专门用一片非凡的区域存储String,如果存在的话间接援用,避免浪费内存,因而必须保障这个具体的常量不能变。
- String类里边是一个 private final char value[].
String对象的两种创立形式
String str1 = "abcd";String str2 = new String("abcd");System.out.println(str1==str2);//false
- 第一种形式是在常量池中拿对象
- 第二种形式是间接在堆内存空间中创立一个新对象
String常量池
- 间接用双引号申明的String对象会间接存储在常量池中
如果不是双引号申明的对象,能够调用该对象的String.intern()办法。
- 如果常量池中曾经蕴含一个等于此String对象内容的字符串,则返回该常量池援用
- 如果常量池中没有,则在常量池中新创建,并返回新创建的援用
- String s = new String("abc");创立了两个对象,一个在常量池,一个在堆内存。
StringBuffer和StringBuilder
- 都是可变字符序列
- StringBuffer:线程平安,执行速度慢;多线程
- StringBuilder:线程不平安,执行速度快;单线程