黑马程序员技术交流社区

标题: 关于equals() [打印本页]

作者: 林剑    时间: 2012-12-7 23:04
标题: 关于equals()
本帖最后由 林剑 于 2012-12-8 08:28 编辑

class Value
{
        int i;
}
class Test12
{
        public static void main(String[] args)
        {
                Integer n1 = new Integer(47);
                Integer n2 = new Integer(47);
                System.out.println(n1.equals(n2));//打印结果是ture

                Value v1 = new Value();
                Value v2 = new Value();
                v1.i = v2.i = 100;
                System.out.println(v1.equals(v2));//打印结果是false
        }
}
不理解,哪位大神能仔细讲讲

作者: 李桐    时间: 2012-12-7 23:49
                Integer n1 = new Integer(666);
                Integer n2 = new Integer(666);
                System.out.println(n1.equals(n2));//Integer比较此对象与指定对象。当且仅当参数不为 null,并且是一个与该对象包含相同 int 值的 Integer 对象时,结果为 true。(在jdk1.6文档里看到的)

                Value v1 = new Value();
                Value v2 = new Value();
                v1.i = v2.i = 100;
                System.out.println(v1.equals(v2));
//类的equals方法一般使用hashcode的引用,两个引用肯定不同所以是false,如果想equals方法为true的话就要以类中某些字段为参照,覆写hashCode和equals方法,如图,这个在eclipse中有快捷键,张孝祥老师也再视频里讲了


作者: 但汉涛    时间: 2012-12-8 00:57
  如果一个类没有自己定义equals方法,那么它将继承Object类的equals方法,Object类的equals方法的实现代码如下:
  boolean equals(Object o){
   return this==o;
  }
这说明,如果一个类没有自己定义equals方法,它默认的equals方法(从Object 类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回false。
System.out.println(v1.equals(v2));v1,v2是两个独立的对象啊,打印出来的一定是false.

作者: 奋斗的青春    时间: 2012-12-8 14:12
  1. package com.itheima.bbs.exercise;
  2. class Test110{
  3.         public static void main(String[] args)
  4.         {
  5.                 Integer n1 = new Integer(88);
  6.                 Integer n2 = new Integer(88);
  7.                 System.out.println(n1.equals(n2)); //打印结果是true
  8.                 System.out.println(n1 == n2); //打印结果是false
  9.                

  10.                 Value v1 = new Value();
  11.                 Value v2 = new Value();
  12.                
  13.                 v1.i = v2.i = 100;
  14.                 //override后
  15.                 System.out.println(v1.equals(v2)); //打印结果是true
  16.                 System.out.println(v1 == v2); //打印结果是false
  17.                
  18.         }
  19. }
  20. class Value
  21. {
  22.         int i;


  23.         @Override
  24.         public int hashCode() {
  25.                 final int prime = 31;
  26.                 int result = 1;
  27.                 result = prime * result + i;
  28.                 return result;
  29.         }

  30.         @Override
  31.         public boolean equals(Object obj) {
  32.                 if (this == obj)
  33.                         return true;
  34.                 if (obj == null)
  35.                         return false;
  36.                 if (getClass() != obj.getClass())
  37.                         return false;
  38.                 Value other = (Value) obj;
  39.                 if (i != other.i)
  40.                         return false;
  41.                 return true;
  42.         }
  43.        

  44. }
复制代码





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