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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 浩南酷酷 中级黑马   /  2014-2-10 09:38  /  1307 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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?

评分

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

查看全部评分

4 个回复

倒序浏览
equals比较的不是内存地址,是值,所以是TRUE
回复 使用道具 举报
因为Integer重写了equals()方法
  1.     public boolean equals(Object obj) {
  2.         if (obj instanceof Integer) {
  3.             return value == ((Integer)obj).intValue();
  4.         }
  5.         return false;
  6.     }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
亲,看下Integar的源码就出来的,主要是因为重写了equals方法
回复 使用道具 举报
equals比较此对象与指定对象。当且仅当参数不为 null,并且是一个与该对象包含相同 int 值的 Integer 对象时,结果为 true。在这里包含的值一对是345,一对是9.他们的值都一样所以相同
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马