黑马程序员技术交流社区

标题: Integer的==比较值问题 [打印本页]

作者: ┣┫流枫    时间: 2014-8-10 21:54
标题: Integer的==比较值问题
本帖最后由 ┣┫流枫 于 2014-8-11 11:20 编辑


程序代码如下:

  1. public class Demo1 {
  2.         public static void main(String[] args) {
  3.                 Integer x=127;
  4.                 Integer y=127;
  5.                 System.out.println(x==y);
  6.                 x=128;
  7.                 y=128;
  8.                 System.out.println(x==y);        
  9.         }
  10. }
复制代码
运行结果:
true
false

为啥是这个结果,求大神解释。

作者: jiangweibin2573    时间: 2014-8-10 21:59
本帖最后由 jiangweibin2573 于 2014-8-10 22:03 编辑

了解下享元模式
因为,java为了节约内存,将1字节范围内的整数,在内存中只建立一份,当再建立新的整型对象的时候,他首先去判断内存是否已经有了需要的那个对象,有则直接调用,而不是建立新值。127和128正是1字节的分割线,一字节表示范围(-128,127).所以再次127时,由于在一字节范围内,他去检测内存中已有127,直接引用了。而128超出1字节了,他不会去判断,而是直接去建对象。

作者: 孤守星空    时间: 2014-8-10 22:01
亲,你技术分都够了还这么玩。在byte值范围内,如果存在就不重新建
作者: Bule丶    时间: 2014-8-10 22:02
如果数值在-128到正127之间,定义的值如果相同,那么都指向同一块空间,因为大多数操作的都是小数据,如果数据超过127那么就是两块空间
作者: 复仇者联盟    时间: 2014-8-10 22:04
嗯,给二楼点赞,楼主不懂,可以回去咱看看视频,我记得好像是集合那几天的吧。
作者: liqi    时间: 2014-8-10 22:28
在-128 到127 的数字,每个数字都只有一个,不会因为实例化对象,而创建新的空间。所以都为TRUE,
超过1 byte,就没实例化一个,开辟一个新空间
作者: 柠萌不    时间: 2014-8-10 23:56
因byte范围而导致第二个情况下地址值不一样所以FALSE。。。
作者: 范靖明    时间: 2014-8-11 09:06
byte的值范围是-128---127
作者: kakasa    时间: 2014-8-11 10:04
额  看了2喽解释还是不懂,回去翻视频了
作者: ┣┫流枫    时间: 2014-8-11 11:20
也就是说,Java为节省内存,在一个字节以内的数,如果有了,就直接引用,没有就创建
第一次X=127.因为有了127所以y直接指向X而不是创建新的。
对于超过一个字节的,就需要自己创建,
x=128是新创建的     y=128也是新创建的
作者: 笑轻轻    时间: 2014-8-11 11:56
孤守星空 发表于 2014-8-10 22:01
亲,你技术分都够了还这么玩。在byte值范围内,如果存在就不重新建

入学考试要10技术分 分配名额要25,加起来不是要35分吗
作者: 冒牌高手    时间: 2014-8-11 13:15
Integer对象如果在一个字节之内的数值都是共享的,一个字节的范围就是-128到127,所以地址比较相同。超过1个字节就是单独的对象了,不共享了,多以地址的指向就不同了。所以为false
作者: liubea    时间: 2014-8-11 14:51
这个是因为Integer类会将常用的数缓存起来,范围是-128-127。当数在这个范围之间,用Integer x =22; Integer y=22的方式创建实例,用到的始终是缓存中的那个22,所以打印会是true。但当用new的方式创建实例时,依然会是false。
作者: 想做开发    时间: 2014-8-11 17:47
jiangweibin2573 发表于 2014-8-10 21:59
了解下享元模式
因为,java为了节约内存,将1字节范围内的整数,在内存中只建立一份,当再建立新的整型对象 ...

楼上正解 赞一个




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