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

本文解析了一道关于Java中Integer缓存机制的面试题,通过反编译.class文件揭示了valueOf方法的工作原理,解释了两个看似相同的Integer对象为何不相等的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

2017-07-24 西安Java培训

 

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

当年可是火遍大江南北

不妨你先看看到底会不会

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

 

真题在此,谁敢不服


 

你觉得简单,那执行一下

真的能如你所愿?

 


一个是true,一个是false!

这是为什么呢?

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

 

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

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


 

这里给解释一下:

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

 


 

valueOf方法的实现原理

 


 

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

 


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

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

 


 

以下代码执行结果:


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

本文由西安Java培训提供www.71admin.com

 

转载于:https://www.cnblogs.com/ricardolu/p/7229428.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值