1. 关于Integer类型的缓存池
基本类型在自动装箱的过程中,会调用valueOf()方法,因此在-128到127之间的值,会直接采用缓存池中的对象
2. 关于String
Java8中,String底层采用final char数组表示;Java9中,底层采用final byte数组存储字符,同时使用coder来标记编码格式。调用intern方法可以将字符串放入到String pool中。
String类型采用final数组的好处
- 线程安全,String的不可变性,让String类型天生具有线程安全的特点
- String Pool的需要,可以将String放入到字符串常量池(String pool)中
- 便于缓存hash值,因为String是不可变的,所有其hash值也不会变化,因此只会计算一次hash值
3. String、StringBuilder、StringBuffer之间的区别
- 不变性:String是具有不变性,StringBuilder和StringBuffer都是可变的
- 线程安全性:String、StringBuffer是线程安全的、StringBuilder是线程不安全的。tring的底层是final数组,因此其天生具有线程安全性,StringBuffer采用的是同步方法,保持其线程安全性。
4. 什么是反射机制?
反射就是在程序运行时,根据Class类对象动态获取对象的信息。反射提供了一定的灵活性,但是带来了安全性和性能上的开销。