让人疑惑的Java代码

作者: Python编程社区 | 来源:发表于2019-04-16 17:02 被阅读0次

我们先看一段代码,很简单对不对

执行一下:

和大多数人心里想的不一样吧,好多人还在纠结,到底是全是true还是全是false呀。

然而一个是true,一个是false,这是为什么呢?

有的人根本不去思考,直接打开百度搜索去查找答案(一个个都是百度首席软件工程师)

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

看一下valueOf方法的实现

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

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

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

结论:我们在比较两个Integer对象的值时,无论是怎么声明的,都一定要使用equals去比较,不能用==,在Java中没有重载操作符这一说,特别是从其它语言转到Java的童鞋们要注意。


思考以下代码的执行结果:

小编推荐一个学Java的学习裙【 六一五,七四一,六三六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

相关文章

  • 让人疑惑的Java代码

    我们先看一段代码,很简单对不对 执行一下: 和大多数人心里想的不一样吧,好多人还在纠结,到底是全是true还是全是...

  • 让人疑惑的Java代码

    我们先看一段代码,很简单对不对 执行一下: 和大多数人心里想的不一样吧,好多人还在纠结,到底是全是true还是全是...

  • Java基础重点解惑

    前言 一些Java中让人疑惑的重要知识点,帮助我们更好的理解代码。 正文 Java程序的入口——main方法 ma...

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

    给大家看的这个笔试题 当年可是火遍大江南北 不妨你先看看到底会不会 这是关于一段令人疑惑的Java代码 我们先看一...

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

    今天给大家看一个以前很火的笔试题,关于一段令人疑惑的Java代码 下面我们来看一下Java代码 执行一下:会是什么...

  • 让人疑惑的事

    我心中一直有个疑问,一个人到底心里能装的了几个人,能爱几个人,或者说能同时喜欢几个人,难道心里没点儿谱吗。 男生女...

  • 爱情让人疑惑

    没谈恋爱之前,我一般把我的另一半幻想成一个黑色的人形轮廓。通过电视,我觉得我要的爱情也是那种很简单的,只要...

  • 让人疑惑的阅读量

    今天天气依然很冷,由于昨天早睡,所以今天起床虽然也需要挣扎一翻,不过比昨天容易不少。 起床后,习惯性看手机,简书阅...

  • 这是一个测试文章

    java代码 java代码2

  • Java中隐式注册native方法

    说明 CPP代码 Java代码 运行java

网友评论

    本文标题:让人疑惑的Java代码

    本文链接:https://www.haomeiwen.com/subject/utxiwqtx.html