基本类型

Integer

image.png
缓存是有使用范围的-128~127

image.png

只有在使用valueOf方法是才会使用缓存,如果声明Integer a = 1 底层也是在使用valueOf来做装箱转换,而Integer b = new Integer(1)则不会使用缓存。
**

为什么只对这个范围做缓存?

Long、Short

image.png

image.png

image.png
缓存范围和缓存情形都和Integer一样

但为什么只对这个范围做缓存?

Double、Float

image.png
image.png
这两个并没有使用缓存
**

字符串

String

image.png
image.png
本质就是数组,然后使用Arrays的各种工具进行操作处理,没有太多好玩的东西

StringBuilder

本质还是数组
image.png
image.png

添加的时候如果需要扩容则会新建一个数组,然后使用底层的拷贝工具复制
image.png

image.png
image.png

StringBuffer

image.png
使用synchronized实现线程安全

image.png
为什么还要搞个缓存?