java中int和Integer的区别有哪些


小编给大家分享一下java中int和Integer的区别有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!最近面试了很多候选人,发现很多人都不太重视基础,甚至连工作十几年,项目经验十几页的老程序员,框架学了一大堆,但是很多 Java 相关的基础知识却很多都答不上来。还有很多人会回答,只知道要用,但是从来不会去看看它具体是怎么实现的。我们都知道作为合格的程序员,基本功不扎实会导致你的程序出现许多你难以诊断的诡异问题,例如产生过大开销(频繁GC导致程序卡顿或者产生OOM),Integer 缓存机制产生的诡异现场(下面会详细说),所以就有想写一个关于面试相关系列的文章,把常见又容易采坑的面试问题总结一下,今天想站在面试官的角度去和大家聊聊一些面试的基础题目,以及尽可能指导大家如何给出一个能让面试官满意的答复int 是 8 个基本数据类型(boolean, byte, short, char, int, float, double, long)之一的整形类型,大小占用4字节,取值范围是正负 2 的 32(4 * 8)次幂,Java 虽然号称一切都是对象,但是基本数据类型是例外Integr 是 int 的包装类,是 JDK 1.5 中引入,提供了字符串转换,数学运算,泛型,自动拆箱装箱等实用功能,极大简化了相关的编程难度下面给出一个典型例子,也是很多人踩过的坑,程序如下(建议自己在机器上实践操作下)可以思考下为什么会出现以上这种诡异的情况,然后我们下面可以看看 Integer.valueOf 的源码源码之内无秘密,我们可以看出来出现以上问题的原因是原由 JDK 对 Integer 构造的改进引入缓存机制导致的,传统构造 Integer 的方式是直接调用构造器 new 一个对象,但是在考察和调研后发现大多数人使用 Integer 都集中在较小的范围,因此 JDK 为 Integer.valueOf 增强了一个缓存机制来改善构造对象的性能开销(没错,自动拆箱装箱反编译后也是调用 valueOf() 方法实现构造对象)Java 官方文档给出 Integer 缓存范围是 -128 ~ 127这里面细节很多,我们就不一一讲述,到这里我们已经可以得出结果了,就是a1 == b1 对象的引用都是从缓存中取出,实际上是相同对象,所以结果的 truea2 == b2 是因为128已经超过了缓存值的范围,Integer 通过 new 构造的对象,因为 == 比较的对象的引用而不是对象的值,所以结果自然就为 false通过以上案例可以我们可以举一反三,不仅仅 Integer 有缓存机制,整个包装类都有缓存机制:Boolean 缓存了 true/false 实例,也就是说 Boolean 只会有 Boolean.TRUE/FALSE 两个常量实例Short 缓存范围是 -128 到 127 之间Byte 范围有限,全部数值都被缓存等等……如果继续深挖缓存,例如明确会频繁使用更大范围的 Integer 值得时候,我们可以使用 JVM 提供的参数应当避免无意的使用拆装箱 自动拆/装箱实际上是 Java 香港云主机一种编译期的优化(技巧),算是一种语法糖,只是 Java 在编译期帮你自动转化,最终生成的字节码还是和你自己转换是一样的,无意的创建十万个对象对于程序的内存开销和处理速度来说是巨大的代价包装类应避免使用 == 运算符进行值比较注意缓存机制的范围以上我只大概列出的典型回答,其实对于大多数面试能回答以上内容就已经算可以及格了,有的公司面试官以喜欢追问出名,直到候选人回答说不知道,才会打住,这道看似简单的题目,其实可以深挖的点还有很多,进一步考察你的基本功是否扎实,例如:线程安全的 Integer (考察你对 java.util.concurrent 并发包的理解)基本数据类型和引用类型的局限(考察你对 Java 泛型的理解)对象在内存中的结构(对象头 Header,实例数据 Instance Data,对齐填充 Padding)以上是“java中int和Integer的区别有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注开发云行业资讯频道!

相关推荐: win7如何恢复出厂设置

这篇 香港云主机“win7如何恢复出厂设置”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“win7如何恢复出厂设置”文章吧。具体步骤:首先打开控制…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 07/25 20:59
下一篇 07/25 20:59

相关推荐