黑马程序员技术交流社区

标题: 关于 equals~求助 [打印本页]

作者: CHJ    时间: 2013-8-30 07:53
标题: 关于 equals~求助
本帖最后由 CHJ 于 2013-8-30 08:50 编辑
  1. class Demo
  2. {
  3. public static void main(String[] args)
  4.         {
  5.                 Integer n1 = new Integer(47);
  6.                 Integer n2 = new Integer(47);

  7.                 System.out.println(n1.equals(n2));
  8.         }
  9. }
复制代码
(n1.equals(n2)); 这句怎么理解啊,新手求教
作者: C-STAL白鳍豚    时间: 2013-8-30 08:13
就是比较n1和n2的值是否相等, 你可能为疑问, 为什么不用==, 因为==比较的是两个对象的地址.  除非是基本类型(int 普通整型float 浮点型char 字符型short 短整型byte 字节型long 长整型double )才可以用==比较值.
作者: chensc    时间: 2013-8-30 08:15
学习学习!
作者: .....淡定    时间: 2013-8-30 08:17
相等。
可以把==想象成人的长相是否一样
把equals想象成人的本质是否一样
==比较两个内存单元中的数据是不是一样的
equals比较内存单元中指向的 实际对象的内容 是不是同一个
作者: 白磊    时间: 2013-8-30 08:18
n1.equals(n2)是比较n1  n2 这两个引用对象所指的对象的值是否相等 ,在这里,事项等的,返回true;如果是n1==n2的话,他们比较的是这两个引用对象所指的对象的地址是否相等,这里不相等,返回false
作者: 月黑风高    时间: 2013-8-30 08:18
integer类型属于基本类型包装,调用equals方法被重写了
    public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }
作者: CHJ    时间: 2013-8-30 08:20
C-STAL白鳍豚 发表于 2013-8-30 08:13
就是比较n1和n2的值是否相等, 你可能为疑问, 为什么不用==, 因为==比较的是两个对象的地址.  除非是基本类 ...

引用 也可以用==吧,我主要是没明白n1.equals(n2) 的意思~(对象n1的equals方法。。。??)

作者: 黄炳期    时间: 2013-8-30 08:55
CHJ 发表于 2013-8-30 08:20
引用 也可以用==吧,我主要是没明白n1.equals(n2) 的意思~(对象n1的equals方法。。。??)
...

Object这个超父类里本身就定义了equals这个方法,就像toString(),getMessage()等方法类似。
    其方法是  public boolean equals(Object obj){}

n1这个对象里就继承了equals 方法,可以直接调用。所以,n1只要调用equals方法并且接收n2就可以进行判断了。


希望可以帮到你。加油。

作者: CHJ    时间: 2013-8-30 09:35
黄炳期 发表于 2013-8-30 08:55
Object这个超父类里本身就定义了equals这个方法,就像toString(),getMessage()等方法类似。
    其方法是 ...

谢谢~继续学习~

作者: masterV    时间: 2013-8-30 09:48
本帖最后由 魏先勇 于 2013-8-30 09:51 编辑

如果没有重写Object中的equals方法,那么在调用时,equals方法等效于“==”,因为Object中的equals就是通过“==”实现的,通常,我们用“==”来比较值是否相等,如果不是基本数据类型,比较的就是引用地址值是否相等,而用equals来比较两个独立对象是否相等。
如果想比较两个独立对象是否相等,则需要重写equals方法,在Integer包装类中就重写了此方法。

作者: liqiang199090    时间: 2013-8-30 10:29
简单的说 == 比较的是对象的地址 equals 比较的是值
作者: 刘劲松    时间: 2013-8-30 11:21
都是new出来的,地址值不同的。这里的equals是Object里面的,并没有复写,如果想进行比较对象指向的值得话,复写equals就行了。




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