堆?栈?常量池(一)

17 篇文章 0 订阅

        作为Java程序员,了解堆和栈,是最基础的基本功。一句话总结堆和栈的作用,就是:堆放对象栈放常量,当然,栈也放了其他一些东西,比如基本类型。

       今天说说常量池,这东西是jdk1.5提供的一个“缓存池”,包装类型Integer 在赋值时,比如Integer  a = 10,这个时候我们会考虑,这个a是个对象吧,那它应该存放在堆里面咯,但事实是这样吗?当a的范围在-128到127之间时,a的“数值”是存放于常量池的。

       所以,当我们遇到面试题,integer之间判断大小,用==吗?integer和int比较大小,用==吗?之类的问题时,我们要明白其中的“隐藏点”。integer是对象,但不代表它的应用对象在值相同的情况下用==比较就为false,原因就在于缓存池!对象之间比较,比较值用equals方法,==比较的是引用地址。

     但是当integer a =100,integer b = 100,a==b时,得到的结果是true,

  1. Integer里弄了一个缓存,对于在 -128—127 之间的数值,会直接使用该缓存里的对象  
  2.  也就是说 Integer c = 3 或者 Integer c = Integer.valueOf(3) ,最终 c 得到的是Integer里的缓存对象
  3. 但是,我们关注这些东西有什么用呢?我们回到,对象的回收是一件麻烦的事情,虽然这些事情我们看不见,而且也是一瞬间的事情,但对象的回收在一般情况下,肯定没有栈中的变量回收快的,所以,为了节省内存,减少GC,熟练运用这些Java技巧对于写出高质量的代码是非常有帮助的,普通业务永远也用不到这些技巧,业务也没有这种需求。但,我们搞技术就应该有对技术有卓越的追求,对性能要“锱铢必较”,全面学习Java的知识,我们才能成为别人口中的“大牛”。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值