微信号:programmer_club

介绍:程序员第一自媒体,与你探讨码农人生路上遇到的各类泛技术话题,定期为你推荐码农人生思考、感悟以及启迪!

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

2017-07-21 22:00 程序员之家

来自:网络




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

当年可是火遍大江南北

不妨你先看看到底会不会

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


真题在此,谁敢不服


你觉得简单,那执行一下

真的能如你所愿?


一个是true,一个是false

这是为什么呢?

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


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

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


这里给解释一下:

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



valueOf方法的实现原理



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


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

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



以下代码执行结果:

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


 




在微信公众号内回复数字“1”

小编拉你进粉丝微信群

不是在文章评论里回

 
程序员之家 更多文章 松本行弘:编程是一生的事业 1个月只敲1天代码,拿着全额薪资,我错了吗? 什么会让程序员丢掉工作? 百度陆奇最新内部演讲:如何成为一个优秀的工程师? 为什么成为一名程序员这么困难? —— 从程序新手到准工程师的必经之路
猜您喜欢 美团·大众点评2016春季实习生招聘指南 强文 | 如何从传统文化解构技术人员的学习?(下) 京东双11全面布局智能化商业 助力用户和合作伙伴双赢 STL空间配置器那点事 Docker基础技术:AUFS