让人疑惑的Java代码
来源:互联网 发布:知乎 原谅我红尘颠倒 编辑:程序博客网 时间:2024/05/18 02:30
转载无限欢迎,但请注明「作者」和「原文地址」。转载请在文中保留此段,感谢您对作者版权的尊重。如需商业转载或刊登,请联系作者获得授权。
原博地址:清浅池塘 (https://zhuanlan.zhihu.com/p/27562748)
我们先看一段代码,很简单对不对:
执行一下:
和大多数人心里想的不一样吧,好多人还在纠结,到底是全是true还是全是false呀。
然而一个是true,一个是false,这是为什么呢?
有的人根本不去思考,直接打开百度搜索去查找答案(一个个都是百度首席软件工程师)
根据Java编译机制,.java文件在编译以后会生成.class文件给JVM加载执行,于是找到.class文件,反编译看了一下,发现编译器在编译我们的代码时,很调皮(聪明的)的在我们声明的变量加上了valueOf方法 ,代码变成了如下:
看一下valueOf方法的实现
我们发现,Integer的作者在写这个类时,为了避免重复创建对象,对Integer值做了缓存,如果这个值在缓存范围内,直接返回缓存好的对象,否则new一个新的对象返回,那究竟这个缓存到底缓存了哪些内容呢?看一下IntegerCache这个类:
这是一个内部静态类,该类只能在Integer这个类的内部访问,这个类在初始化的时候,会去加载JVM的配置,如果有值,就用配置的值初始化缓存数组,否则就缓存-128到127之间的值。
再来看看我们之前的代码:
结论:我们在比较两个Integer对象的值时,无论是怎么声明的,都一定要使用equals去比较,不能用==。
阅读全文
1 0
- 让人疑惑的Java代码
- 让人疑惑的Java代码
- 五行代码的疑惑
- 疑惑的代码
- java串口调试代码疑惑。
- 一个故意让人疑惑的名词:平台。
- 一维数组让人疑惑的一个问题
- java中关于代码块的一些疑惑
- [java]让人尴尬的一段代码
- 彻底解开Java中String对象不可变的迷雾,让你不在疑惑
- 疑惑代码
- java与.net的疑惑
- java语言的一些疑惑
- 提高你的Java代码质量吧:让我们疑惑的字符串拼接方式的选择
- 一直让自己疑惑的问题有了答案...
- 城里人让乡下人最疑惑的16件事
- 让java代码更加的简洁
- 让人感动的代码
- hdu2101 A + B Problem Too(C语言)
- POJ 1321 棋盘问题
- [RK3288][Android6.0] 设置中通过Sensor旋转显示画面小结
- AngularJs Module init中使用sequelize创建数据库表
- 小技巧:虚线分割线
- 让人疑惑的Java代码
- LOJ 6001 太空飞行计划 (最大权闭合图+打印最小割)
- Qt中QThread线程与主线程的数据传送以及lineEdit的显示
- am命令基本知识
- ==和equals的区别
- TensorFlow实战:Chapter-5(CNN-3-经典卷积神经网络(GoogleNet))
- 执行Class.forName 报错 com.mysql.jdbc.Driverjava.lang.NullPointerException
- CPU下的计时与GPU计时对比
- 对nginx学习记录