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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© CHJ 中级黑马   /  2013-8-30 07:53  /  1562 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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)); 这句怎么理解啊,新手求教

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

11 个回复

倒序浏览
就是比较n1和n2的值是否相等, 你可能为疑问, 为什么不用==, 因为==比较的是两个对象的地址.  除非是基本类型(int 普通整型float 浮点型char 字符型short 短整型byte 字节型long 长整型double )才可以用==比较值.
回复 使用道具 举报
学习学习!
回复 使用道具 举报
相等。
可以把==想象成人的长相是否一样
把equals想象成人的本质是否一样
==比较两个内存单元中的数据是不是一样的
equals比较内存单元中指向的 实际对象的内容 是不是同一个
回复 使用道具 举报
n1.equals(n2)是比较n1  n2 这两个引用对象所指的对象的值是否相等 ,在这里,事项等的,返回true;如果是n1==n2的话,他们比较的是这两个引用对象所指的对象的地址是否相等,这里不相等,返回false
回复 使用道具 举报
integer类型属于基本类型包装,调用equals方法被重写了
    public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }
回复 使用道具 举报
CHJ 中级黑马 2013-8-30 08:20:05
7#
C-STAL白鳍豚 发表于 2013-8-30 08:13
就是比较n1和n2的值是否相等, 你可能为疑问, 为什么不用==, 因为==比较的是两个对象的地址.  除非是基本类 ...

引用 也可以用==吧,我主要是没明白n1.equals(n2) 的意思~(对象n1的equals方法。。。??)
回复 使用道具 举报
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:06
9#
黄炳期 发表于 2013-8-30 08:55
Object这个超父类里本身就定义了equals这个方法,就像toString(),getMessage()等方法类似。
    其方法是 ...

谢谢~继续学习~
回复 使用道具 举报
本帖最后由 魏先勇 于 2013-8-30 09:51 编辑

如果没有重写Object中的equals方法,那么在调用时,equals方法等效于“==”,因为Object中的equals就是通过“==”实现的,通常,我们用“==”来比较值是否相等,如果不是基本数据类型,比较的就是引用地址值是否相等,而用equals来比较两个独立对象是否相等。
如果想比较两个独立对象是否相等,则需要重写equals方法,在Integer包装类中就重写了此方法。
回复 使用道具 举报
简单的说 == 比较的是对象的地址 equals 比较的是值
回复 使用道具 举报
都是new出来的,地址值不同的。这里的equals是Object里面的,并没有复写,如果想进行比较对象指向的值得话,复写equals就行了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马