Long
1. 缓存
Long最被我们关注的就是缓存问题,long自己实现了一种缓存机制,缓存了从-128~127内的所有long值,如果是这个范围内的long值,就不会初始化,而是从缓存中拿,缓存初始化源码如下
还有一个细节就是在64位的操作系统中(现在32位的应该很少了吧.jpg),Long和Double是按照32+32的形式存储的,所以在基础数据类型中,这两个可能会有线程安全问题,这个如果大家希望深入讨论后面可以开一篇小专题
2. 常见面试题
2.1 为什么使用long时,大家推荐多使用valueOf方法,少使用parseLong方法
答:因为long本身有缓存机制,缓存了从-128到127范围内的long,valueOf方法会从缓存中去拿,如果命中缓存,会减少资源的开销,parseLong就没有这个机制
(Integer的cache同理)
2.2 如何解决String 乱码的问题
答:乱码的问题的根源主要是两个:字符集不支持复杂汉字、二进制进行转化时字符集不匹配,所以在String 乱码时我们可以这么做:
(1)所有可以指定字符集的地方强制指定字符集,比如new String 和 getBytes 这两个地方;
(2)我们应该使用UTF-8 这种能完整支持复杂汉字的字符集
2.3 为什么大家都说String 是不可变的
答:主要是因为String 和保存数据的 char 数组,都被 final 关键字所修饰,所以是不可变的,具体细节描述可以第一节中源码
2.4 String 一些常用操作问题,如问如何分割、合并、替换、删除、截取等等问题
答:这些都属于问String 的基本操作题目,考察我们平时对 String 的使用熟练程度,可以第一节中内容