A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 疯子的昨天 中级黑马   /  2014-1-21 17:55  /  1070 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看张老师的 JAVA基础加强看到数据的自动装箱与拆箱。但是在整数上好像只支持-128到127,即只支持一个字节的范围内。对两个相同数据进行封装会显示true。我想问下为什么数据弄大一些就不支持了?

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
在byte范围内的值,自动装箱时是直接赋值的。超过这个范围,自动装箱是要在堆内存中创建对象。引用地址自然就不一样的了。所以就false了。
回复 使用道具 举报
本帖最后由 猎鹰tianya 于 2014-1-21 18:55 编辑
据说,这是一种设计模式:享元模式
简单一句话理解:分享细粒度数据!
可能Java认为,这种小的数据用到几率大。
所以为了提高效率,这样的对象创建一次后,会被缓存起来,下次用的时候直接拿,不会再次创建。
至于为什么只缓存【-128-127】这个范围内的数,这是因为,,,,,,,源代码里是这么规定的啊。
你可以去JDK安装目录下找到src.zip,用压缩软件打开,然后找到Integer的源码,一探究竟。


或者,在eclipse中,Ctrl+单击-->打开源文件:
尽管,看不懂,但可以找到专门用于缓冲的这个内部类:IntegerCache

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
谢谢。~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马