黑马程序员技术交流社区

标题: equals()的理解 [打印本页]

作者: 冯超    时间: 2012-12-12 16:51
标题: equals()的理解
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方法难道被覆盖了?
作者: 但汉涛    时间: 2012-12-12 17:38
开始我也奇怪过。
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的方法。

刚开始我也以为很简单的东西。
最后想了半天,才明白。
作者: 焦健    时间: 2012-12-12 21:09
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;
}
作者: 洪灿阳    时间: 2012-12-12 21:24
学习了!!!   Integer 对equals方法的重写。
   public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }
作者: 惠晖    时间: 2012-12-12 21:40
呵呵 我们自定义的类 只要没重写equals    那么这个方法 就跟==于是一个意思
作者: 冯超    时间: 2012-12-16 22:53
学习了···
  自己没深入 想问题
最近要考四级 老毕讲的javascript快学完了,不知道版主对我有什么建议没有?是继续学javaWEB 还是加强前面的 基础!




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