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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯超 高级黑马   /  2012-12-12 16:51  /  1497 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class test {
        public static void main(String[] args)
        {
                Integer i = new Integer(12);
                Integer u = new Integer(12);
                System.out.println("== :"+(i == u));
                System.out.println("equals() :"+i.equals(u));
                 
                value i1 = new value(12);
                value u1 = new value(12);
                System.out.println("== :"+(i1 == u1));
                System.out.println("equals() :"+i1.equals(u1));
        }
}
class value
{
        public value(int i)
        {
                this.i = i;
        }
        int i;
}
//== 和 !=比较就是对象的引用。而equals()比较的事两个对象的实际类型。
   而为什么最后两个比较全是false呢?? equals方法难道被覆盖了?

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 神马都是浮云

查看全部评分

5 个回复

倒序浏览
开始我也奇怪过。
equals()方法的原型:
  1. public boolean equals(Object obj) {
  2.         return (this == obj);
  3.     }
复制代码
Integer中的equals()方法:
  1.     public boolean equals(Object obj) {
  2.         if (obj instanceof Integer) {
  3.             return value == ((Integer)obj).intValue();
  4.         }
  5.         return false;
  6.     }
复制代码
继承自Object中的equals()方法与==没什么两样,只是Integer类对equals()方法进行了重写而已,这样我们很容易能写出令上面例子中System.out.println(v1.equals(v2));语句输出true的方法。

刚开始我也以为很简单的东西。
最后想了半天,才明白。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
public class IO8 {
        public static void main(String[] args)
        {
                Integer i = new Integer(12);
                Integer u = new Integer(12);
                System.out.println("== :"+(i == u));//==比较的是地址值,创建的两个对象地址值结果不一样,false
                System.out.println("equals() :"+i.equals(u));//Integer中的public boolean equals(Object obj)比较此对象与指定对象。当且仅当参数不为 null,并且是一个与该对象包含相同 int 值的 Integer 对象时,结果为 true。
                                                                  //从api中可以知道该equals比较的是int值,所以是true
                value i1 = new value(12);
                value u1 = new value(12);
                System.out.println(("=="+i1+" =="+ u1));//==比较的是地址值,创建的两个对象地址值结果不一样,false
                System.out.println("equals() :"+i1.equals(u1));//Object类中的equals也是比较的地址值,所以false。
        }
}
class value
{
        public value(int i)
        {
                this.i = i;
        }
        int i;
}

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
学习了!!!   Integer 对equals方法的重写。
   public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }
回复 使用道具 举报
呵呵 我们自定义的类 只要没重写equals    那么这个方法 就跟==于是一个意思
回复 使用道具 举报
学习了···
  自己没深入 想问题
最近要考四级 老毕讲的javascript快学完了,不知道版主对我有什么建议没有?是继续学javaWEB 还是加强前面的 基础!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马