黑马程序员技术交流社区

标题: 请教一下 [打印本页]

作者: 疯子的昨天    时间: 2014-1-21 17:55
标题: 请教一下
看张老师的 JAVA基础加强看到数据的自动装箱与拆箱。但是在整数上好像只支持-128到127,即只支持一个字节的范围内。对两个相同数据进行封装会显示true。我想问下为什么数据弄大一些就不支持了?

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


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


作者: 疯子的昨天    时间: 2014-1-22 13:46
谢谢。~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2