Java中的int和Integer

摘要

极客时间里的Java核心技术系列,第7讲,记录一些笔记。
关键词:自动拆箱、自动装箱、缓存、静态工厂

  • Java号称是一切接对象,对象都是引用类型,往往是分散的存储在堆的不同位置,所以就无法利用现代CPU的缓存机制。
    但是Java中也有基本数据类型的,在内存里就是一段连续的内存。
    基本数据类型和Java泛型并不能配合使用。

    Java 中的泛型是伪泛型,在编译期就转换为特定的类型了。
    所以就决定了使用泛型就 必须要可以转换为 Object 类。

从 Java5 开始,就引入了自动拆箱/装箱机制。
自动拆箱/装箱机制 是发生在编译期间的行为。

自动装箱:

Integer a = 123;
背后是调用了 Integer里的静态工厂方法 valueOf()

静态工厂方法:
能够创建“新"对象的静态方法。尽可能的使用缓存中的实例。

Integer 里的缓存实例 范围是 -128 ~ 127。
这个 最高的127是默认的,可以给 jvm 传参来改变。
(-XX:AutoBoxCacheMax=N)

  • 基本类型 对应的包装类型的缓存
    Boolean: TRUE/FALSE
    Byte: 数量少,全部缓存了。-128~127

    byte 在 Java 占8bit。最高位是符号位。
    表示成十进制就是 -128 ~ 127

    Short:也是 -128 ~ 127
    Character:’\u0000’ ~ ‘\u007F’ (换成十进制就是 0 ~ 127)

  • 基本数据类型占用空间大小:
    short、char : 16bit
    int、float:32bit
    long、double:64bit
    boolean :可以用1bit来存储,JVM在编译期间将boolean转为int(true为1,false为0)。具体的大小没有明确的规定

自动拆箱:

int b = a;
背后是调用 Number 抽象类里有的 intValue() 方法。

  • 自动拆箱的 xxxVlaue()提供来源:

Integer a = new Integer(123) 和 Integer a = 123 的区别:
一个是创建对象, 一个是自动装箱(使用缓存里的实例)。

创建10万个对象 和 10万个整数,开销显而易见的就不是一个数量级别的。

HotSpot虚拟机中,Java 中的对象在内存中的结构分为:
对象头、实例数据、对齐填充(对象的大小要是 8字节 的整数倍)。

ps:自从上一次第6讲的之后的那天断网了(第二天换了个光猫)。。。就一直托到现在!

参考链接:

https://cyc2018.github.io/CS-Notes/#/notes/Java%20%E5%9F%BA%E7%A1%80

https://www.liaoxuefeng.com/wiki/1252599548343744/1260473794166400

https://www.cnblogs.com/duanxz/p/4967042.html

全部评论

相关推荐

来个大佬救一下,为上投了都是石沉大海了,没实习经历的话怕秋招直接进不了面。什么实习这么难找,基本
心态爆炸了:现在正式的岗位都少,实习基本不咋招的,除了大厂,中小企业其实没那么多岗位需求,就算是有,大多都是招一两个廉价劳动力,同时,他们也会希望你一来就能干活的,没时间培训你,就让你了解公司的项目,你了解完就可以开始干活。再者是,很多低质量的实习其实用处没有那么大的。我去年也是找实习找到破防,最后去了一家深圳的小公司实习,工作对我来说很简单,甚至不如我在学校做的项目,秋招的时候,这段实习经历也并没有帮上什么忙,投递简历,依旧非常低的回复率。低回复率是常态,尤其是找实习,找不到,那就把重心放在优化自己的简历和项目,多看八股文,锻炼自己的面试能力,多看别人的面经,自己模拟面试,等秋招的时候,只要有那么寥寥几次,好好抓住那几次机会。
点赞 评论 收藏
分享
06-12 10:50
门头沟学院 Java
你的不定积分没加C:我怎么在学院群看到了同样的话
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 11:24
大家还是用ai改吧,我心疼得要死,就当花钱买教训吧,人家直接拿完钱就跑路了
程序员小白条:简历修改700....神奇,又不是帮你面试,咋的,简历修改从双非变92了还是没实习变成有大厂实习了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务