黑马程序员技术交流社区

标题: 请问这个为什么是true [打印本页]

作者: 浩南酷酷    时间: 2014-2-10 09:38
标题: 请问这个为什么是true
Integer i1 = 345;
Integer i2 = 345;

System.out.println(i1 == i2);                        
System.out.println(i1.equals(i2));                                 
               
Integer i3 = Integer.valueOf(9);
Integer i4 = Integer.valueOf(9);
               
System.out.println(i3 == i4);                                       
System.out.println(i3.equals(i4));
这个 == 的我知道了,在一个字节内的数创建对象只要调用以前的就好,所以i1==i2是false,i3==i4是true
可是equals的为什么都是true?


作者: guhaibin    时间: 2014-2-10 09:44
equals比较的不是内存地址,是值,所以是TRUE
作者: lixiuliang    时间: 2014-2-10 09:47
因为Integer重写了equals()方法
  1.     public boolean equals(Object obj) {
  2.         if (obj instanceof Integer) {
  3.             return value == ((Integer)obj).intValue();
  4.         }
  5.         return false;
  6.     }
复制代码

作者: 廉伟杰    时间: 2014-2-10 20:49
亲,看下Integar的源码就出来的,主要是因为重写了equals方法
作者: 奋斗的小胖子    时间: 2014-2-11 09:54
equals比较此对象与指定对象。当且仅当参数不为 null,并且是一个与该对象包含相同 int 值的 Integer 对象时,结果为 true。在这里包含的值一对是345,一对是9.他们的值都一样所以相同




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