java一个面试知识点 你应该会遇见过,如下:
Integer a = 100 ;
Integer b = 100 ;
Integer c = 200 ;
Integer d = 200 ;
System.out.println(a==b);
System.out.println(c==d);
有经验的 会想到这个是要考我们关于Integer的缓存机制范围问题
Integer的缓存机制 [-128,127]
所以 a == b 结果为 true , c == d 结果为 false
基本上,问题到这也就完了,因为考的目的已经达到了。
but,,,如果有“较真”的面试官询问 怎么让c==d为true? 因吹斯听,这真是一个有意思的question
看了jdk源码 有关Integer的
|
[-128,127]的出处。
通过设置 -XX:AutoBoxCacheMax 属性 设置jvm最大的Integer缓存池范围
这样
完工。。。。
过来补个知识,其他包装类的缓存机制范围
Boolean:(全部缓存)
Byte:(全部缓存)
Character(<= 127缓存)
Short(-128 — 127缓存)
Long(-128 — 127缓存)
Float(没有缓存)
Doulbe(没有缓存)
- 本文标题: 一个有点意思的Java知识点
- 文章作者: sherryriver(木木三可)
- 发布时间: 2016.12.26
- 本文链接: https://sherryriver.github.io/2016/12/26/Integer/
- 许可协议: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。