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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

代码如下:
public class TestOverquals
{
        public static void main(String args[])
        {
                TestPerson1 p11 = new TestPerson1("张三",25);
                TestPerson1 p12 = new TestPerson1("张三",25);
                System.out.println(p11.equals(p12)?"是同一个人":"不是同一个人");
        }
}

class TestPerson1
{
        private String name;
        private int age;
        public  TestPerson1(String name ,int age)
        {
                this.name = name;
                this.age = age;
        }
       
        public boolean equals(Object o)
        {
                boolean temp = true;
                TestPerson1 p1 = this;
                if(o instanceof TestPerson1)
                {
                        TestPerson1 p2 = (TestPerson1)o;
               
                        if(!(p1.name.equals(p2.name)&&p1.age==p2.age)) //这里看不懂,首先equals方法比较的是2个对象,他俩的name属性也可以比较吗?而且这里调         

//          用的是没有赋写的object类的equals方法,那么他俩的内存地址值肯定是不同的。应该是false,然后取反 不就是true了么?true了就执行下一条语句,不就是

//否了么。。绕晕了。。。真心迷糊了。。。。
                        {
                                temp = false;
                        }
                }
                else
                {
                        temp =false;
                       
                }
                return temp;
        }
}




评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
  if(!(p1.name.equals(p2.name)&&p1.age==p2.age))
equals比较的是对象的内容  而==则比较的是对象是否是同一个。
回复 使用道具 举报
关于“equals”和“==”的理解。请看论坛帖子:http://bbs.itheima.com/thread-40672-1-2.html
希望能帮到你
回复 使用道具 举报
name用==比较,下面是我对你代码的修改,和部分注释,希望对你有所帮助
  1. class TestPerson1
  2. {
  3.         private String name;
  4.         private int age;
  5.         public  TestPerson1(String name ,int age)
  6.         {
  7.                 this.name = name;
  8.                 this.age = age;
  9.         }
  10.        public boolean equals(Object o)
  11.         {
  12.                 boolean temp = true;
  13.                 if(o instanceof TestPerson1)
  14.                 {
  15.                         TestPerson1 p2 = (TestPerson1)o; //判断如果o属于TestPerson1,强转
  16.                
  17.                         if(!(this.name==p2.name&&this.age==p2.age))     //如果p2的两个属性与调用equals方法的对象的属性不等,返回false,否则返回true
  18.                         {
  19.                                 temp = false;
  20.                         }
  21.                 }
  22.                 else
  23.                 {
  24.                         temp =false;
  25.                         
  26.                 }
  27.                 return temp;
  28.         }
  29. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
class TestPerson1
{
       private String name;//字符串
        private int age;//int型数据
        public  TestPerson1(String name ,int age)
        {
                this.name = name;
                this.age = age;
        }
        
        public boolean equals(Object o)
        {
                boolean temp = true;
                TestPerson1 p1 = this;
                if(o instanceof TestPerson1)
                {
                        TestPerson1 p2 = (TestPerson1)o;
                      //注意看上面 name和age的定义,这里比较是两个对象的name和age是否相同
                        if(!(p1.name.equals(p2.name)&&p1.age==p2.age)) //这里看不懂,首先equals方法比较的是2个对象,他俩的name属性也可以比较吗?而且这里调         

//          用的是没有赋写的object类的equals方法,那么他俩的内存地址值肯定是不同的。应该是false,然后取反 不就是true了么?true了就执行下一条语句,不就是

//否了么。。绕晕了。。。真心迷糊了。。。。
                        {
                                temp = false;
                        }
                }
                else
                {
                        temp =false;
                        
                }
                return temp;
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. if(!(p1.name.equals(p2.name)&&p1.age==p2.age))

  2. /* name的属性是String,故调用的是String的equals方法
  3. * public boolean equals(Object anObject)
  4. * -->如果给定对象表示的 String 与此 String 相等,则返回 true;否则返回 false。比较的是字符串的内容哦
  5. * 所以p1.name.equals(p2.name)返回true,同理p1.age==p2.age也返回true。
  6. * 还有就是if(!(p1.name.equals(p2.name)&&p1.age==p2.age))当中有一个!。所以if当中的语句不执行
  7. */           
  8.             {
  9.                     temp = false;
  10.             }
  11.         }
复制代码
回复 使用道具 举报
我也来说说,顺便稍稍优化一下代码
public class DuoTaiDemo{
         public static void main(String args[]){
                 TestPerson1 p11 = new TestPerson1("张三",25);
                 TestPerson1 p12 = new TestPerson1("张三",25);
                 System.out.println(p11.equals(p12)?"是同一个人":"不是同一个人");
         }
}

class TestPerson1
{
         private String name;
         private int age;
         public  TestPerson1(String name ,int age)
         {
                 this.name = name;
                 this.age = age;
         }
         
        public boolean equals(Object o)
         {
                 boolean temp = true;
                 TestPerson1 p1 = this;
                 if(o instanceof TestPerson1)
                {
                         TestPerson1 p2 = (TestPerson1)o;
               
                        if(!(p1.name.equals(p2.name)&&p1.age==p2.age)) /*这个嘛。你自己定义的name类型是String,
                                                                        String本身就重载了Object的equals方法,比较的是String类型的内容,而不是地址引用变量的地址,这个不同于==符号的比较,毕姥爷有讲的
                                                                        */
                      {
                                 temp = false;
                         }
                         return temp;//不是同一个人。返回false
                }
                return false;//需要返回一个false,因为类型不匹配
         }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马