常见的Java面试基础知识总结

      2020-09-16 10:30      JAVA编程


1. Java中的原始数据类型都有哪些,它们的大小及对应的封装类是什么?


(1)boolean


boolean数据类型非true即false。这个数据类型表示1 bit的信息,但是它的大小并没有精确定义。


《Java虚拟机规范》中如是说:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。这样我们可以得出boolean类型单独使用是4个字节,在数组中又是1个字节。那虚拟机为什么要用int来代替boolean呢?为什么不用byte或short,这样不是更节省内存空间吗?实际上,使用int的原因是,对于当下32位的CPU来说,一次进行32位的数据交换更加高效。


综上,我们可以知道:官方文档对boolean类型没有给出精确的定义,《Java虚拟机规范》给出了“单独时使用4个字节,boolean数组时1个字节”的定义,具体还要看虚拟机实现是否按照规范来,所以1个字节、4个字节都是有可能的。这其实是一种时空权衡。


boolean类型的封装类是Boolean。


(2)byte——1 byte——Byte


(3)short——2 bytes——Short


(4)int——4 bytes——Integer


(5)long——8 bytes——Long


(6)float——4 bytes——Float


(7)double——8 bytes——Double


(8)char——2 bytes——Character



2. 谈一谈”==“与”equals()的区别。


《Think in Java》中说:“关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系”。


==判断的是两个对象的内存地址是否一样,适用于原始数据类型和枚举类型(它们的变量存储的是值本身,而引用类型变量存储的是引用);equals是Object类的方法,Object对它的实现是比较内存地址,我们可以重写这个方法来自定义“相等”这个概念。比如类库中的String、Date等类就对这个方法进行了重写。


综上,对于枚举类型和原始数据类型的相等性比较,应该使用==;对于引用类型的相等性比较,应该使用equals方法。


3. Java中的四种引用及其应用场景是什么?


强引用: 通常我们使用new操作符创建一个对象时所返回的引用即为强引用

软引用: 若一个对象只能通过软引用到达,那么这个对象在内存不足时会被回收,可用于图片缓存中,内存不足时系统会自动回收不再使用的Bitmap

弱引用: 若一个对象只能通过弱引用到达,那么它就会被回收(即使内存充足),同样可用于图片缓存中,这时候只要Bitmap不再使用就会被回收

虚引用: 虚引用是Java中最“弱”的引用,通过它甚至无法获取被引用的对象,它存在的唯一作用就是当它指向的对象回收时,它本身会被加入到引用队列中,这样我们可以知道它指向的对象何时被销毁。


4.object中定义了哪些方法?


clone(), equals(), hashCode(), toString(), notify(), notifyAll(), wait(), finalize(), getClass()


5. hashCode的作用是什么?


请参见散列表的基本原理与实现


6. ArrayList, LinkedList, Vector的区别是什么?


ArrayList: 内部采用数组存储元素,支持高效随机访问,支持动态调整大小

LinkedList: 内部采用链表来存储元素,支持快速插入/删除元素,但不支持高效地随机访问

Vector: 可以看作线程安全版的ArrayList


7. String, StringBuilder, StringBuffer的区别是什么?


String: 不可变的字符序列,若要向其中添加新字符需要创建一个新的String对象

StringBuilder: 可变字符序列,支持向其中添加新字符(无需创建新对象)

StringBuffer: 可以看作线程安全版的StringBuilder


8. Map, Set, List, Queue、Stack的特点及用法。


Map: Java中存储键值对的数据类型都实现了这个接口,表示“映射表”。支持的两个核心操作是get(Object key)以及put(K key, V value),分别用来获取键对应的值以及向映射表中插入键值对。

Set: 实现了这个接口的集合类型中不允许存在重复的元素,代表数学意义上的“集合”。它所支持的核心操作有add(E e),remove(Object o),contains(Object o),分别用于添加元素,删除元素以及判断给定元素是否存在于集中。

List: Java中集合框架中的列表类型都实现了这个接口,表示一种有序序列。支持get(int index), add(E e)等操作。

Queue: Java集合框架中的队列接口,代表了“先进先出”队列。支持add(E element), remove()等操作。

Stack: Java集合框架中表示堆栈的数据类型,堆栈是一种“后进先出”的数据结构。支持push(E item), pop()等操作。

更详细的说明请参考官方文档,对相关数据结构不太熟悉的同学可以参考《算法导论》或其他相关书籍。


9. HashMap和HashTable的区别


HashTable是线程安全的,而HashMap不是

HashMap中允许存在null键和null值,而HashTable中不允许

更加详细的分析请参考深入解析HashMap、HashTable


10. HashMap的实现原理


简单的说,HashMap的底层实现是“基于拉链法的散列表”。详细分析请参考深入解析HashMap、HashTable



以上就是java培训机构的小编针对“常见的Java面试基础知识总结”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。