知识点来自面试总结帖: BAT大厂面试题整理
想尝试总结前三个部分的知识点,也一并总结一下相关的延伸知识和曾经踩过的雷,这一篇先总结java吧
漫漫长路,先迈出第一步吧
(一)java基础知识
1. java中==和equals和hashCode的区别
== 属于运算符,一般多用于基本类型的比较,如int, float, double, char, boolean;作用于对象则会比较两者的内存地址
equals() 则是Object基类中提供的一个允许重写的方法,用于比较对象的值是否相等。 常见的例子有java包装类(如Integer、String、Float类型)的比较。若自定义一个继承自Object的类,由于父类的equals()仅return obj1 == obj2;需重写equals(),定义比较方法。
hashCode()是用于获得某一变量或对象的哈希值的方法,当比较对象的值相等时,对应hashCode值一定相等;反之,若 hashCode值相等,则实际值不一定相等。
*哈希值可以简单地理解为存储地址,hashCode()的本质是 一个由值到存储地址的映射关系(函数),即 存储地址=f(变量值) [形如 y=f(x)]。 这种方式可以方便地进行随机读写,简化判断等操作,但也存在发生存储地址冲突的可能性,也即不同的x对应了相同的y值。好的映射关系能减少冲突发生的次数,但不能完全避免。一个解决办法是使用链地址法。
2. int、char、long各占多少字节数
java中int为4个字节,char为2个字节,long为8个字节。(1Byte = 8bits)
3. int与integer的区别
int是基本数据类型,其默认值为0,可以进行赋值、比较、运算等操作,无法调用方法、实例化对象;
Integer是Java中的包装类,继承自Object基类,其默认值为null,需实例化后使用。
*Integer的两种实例化方式:
Integer a = 100;
Integer b = new Integer(100);
Integer实际保存对象的引用,所以当使用new()实例化Integer对象后,比较内存地址的==运算符返回的结果均为false;对于第一种情况,Integer类将转换执行Integer.valueOf(100),该方法首先判断值是否属于(-128,127),这些值事先已建立了缓存,若满足判断,将直接把缓存区的引用赋给变量。
Integer c = 100;
return a == b;//return false
return a == c;//return true