黑马程序员技术交流社区

标题: 为什么结果不同??????? [打印本页]

作者: 行进中的蜗牛    时间: 2014-9-19 23:15
标题: 为什么结果不同???????
Integer i5 = 128;
  Integer i6 = 128;
  System.out.println(i5 == i6);false
  System.out.println(i5.equals(i6));true
  
  Integer i7 = 127;
  Integer i8 = 127;
  System.out.println(i7 == i8);  true
  System.out.println(i7.equals(i8));true

作者: Huberry    时间: 2014-9-20 01:14
本帖最后由 Huberry 于 2014-9-20 01:17 编辑

Integer类把byte类型范围内的这些使用频率高的小数据对象都缓存起来了,当你创建对象时,先到自己的缓存里面找,如果有,就让你指向这个对象,如果没有,就在堆内存中创建一个新对象

所以当你创建的对象值在byte范围内时,不管你创建多少个,相同的值都是指向同一个对象;
当你创建的对象超过byte范围时,你每创建一个对象,在堆内存中就会有一个新的对象
“==”比较的是引用数据类型的地址值
“eqauls”比较的是对象是否相同

作者: 行进中的蜗牛    时间: 2014-9-20 13:52
哦.............





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