专栏名称: java那些事
分享java开发中常用的技术,分享软件开发中各种新技术的应用方法。每天推送java技术相关或者互联网相关文章。关注“java那些事”,让自己做一个潮流的java技术人!《java程序员由笨鸟到菜鸟》系列文章火热更新中。
目录
相关文章推荐
Java基基  ·  京东一面:Spring ... ·  昨天  
Java基基  ·  京东一面:Spring ... ·  昨天  
芋道源码  ·  Spring Event + DDD = 王炸!! ·  3 天前  
芋道源码  ·  对领域的认知比会写代码更重要 ·  4 天前  
Java编程精选  ·  SpringBoot中使用注解来实现 ... ·  1 周前  
51好读  ›  专栏  ›  java那些事

让人疑惑的代码,竟成大多公司面试题热门!

java那些事  · 公众号  · Java  · 2017-07-18 18:08

正文


小编今天给大家看的这个笔试题

当年可是火遍大江南北

不妨你先看看到底会不会

这是关于一段令人疑惑的Java代码

真题在此,谁敢不服


你觉得简单,那执行一下

真的能如你所愿?


一个是true,一个是false

这是为什么呢?

和大多数人心里想的不一样吧!


心中是不是有一万个草泥马?

不少不懂的就装B去百度了......


这里给解释一下:

根据Java编译机制,.java文件在编译以后会生成.class文件给JVM加载执行,于是找到.class文件,反编译看了一下,发现编译器在编译我们的代码时,很调皮(聪明的)的在我们声明的变量加上了valueOf方法 ,代码变成了如下:


valueOf方法的实现原理


我们发现,Integer的作者在写这个类时,为了避免重复创建对象,对Integer值做了缓存,如果这个值在缓存范围内,直接返回缓存好的对象,否则new一个新的对象返回,那究竟这个缓存到底缓存了哪些内容呢?看一下IntegerCache这个类:

这是一个内部静态类,该类只能在Integer这个类的内部访问,这个类在初始化的时候,会去加载JVM的配置,如果有值,就用配置的值初始化缓存数组,否则就缓存-128到127之间的值。

再来看看我们之前的代码:


以下代码执行结果:

看完这个,是不是明白了呢


推荐程序员必备微信号 


程序员内参
微信号:

programmer0001



推荐理由:
在这里,我们分享程序员相关技术,职场生活,行业热点资讯。不定期还会分享IT趣文和趣图。这里属于我们程序员自己的生活,工作和娱乐空间。


 ▼长按下方↓↓↓二维码识别关注