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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cuijinghao 中级黑马   /  2015-9-29 23:53  /  688 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  ==:
   可以比较基本类型,也可以比较引用类型。
   比较基本类型,比较的是值是否相同。
   比较引用类型,比较的是地址值是否相同。
  equals:
   只能比较引用类型。
   默认情况下,比较的是地址值是否相同。
   如果想比较内容,请自己重写Object类的equals()方法。

10 个回复

倒序浏览
通知分析得很好,我也是在这里很糊涂,回头我还要看看你的最后一句“如果想比较内容,请自己重写Object类的equals()方法“。这句话我还没搞清楚

点评

是的,这个地方最好举个例子  发表于 2015-10-1 20:40
回复 使用道具 举报
进来学习一下~
回复 使用道具 举报
学习一下                                          
回复 使用道具 举报
总结得很好~~~
回复 使用道具 举报
没说清楚,最好举个例子
回复 使用道具 举报
我来举个例子吧,下面是一个标准的学生类,equals方法是重写的,如果不重写此方法,则调用此方法为默认继承的Object的equals方法,比较的是对象的地址值是否相同,我们知道不同的对象肯定有不同的地址值,所以此方法不重写一般没什么用。  下面例子重写后比较的是学生类中 的名字和年龄属性是否相同。
  1. public class Student {
  2.         private String name;
  3.         private int age;
  4.         public Student() {
  5.                 super();
  6.         }
  7.         public Student(String name, int age) {
  8.                 super();
  9.                 this.name = name;
  10.                 this.age = age;
  11.         }
  12.         public String getName() {
  13.                 return name;
  14.         }
  15.         public void setName(String name) {
  16.                 this.name = name;
  17.         }
  18.         public int getAge() {
  19.                 return age;
  20.         }
  21.         public void setAge(int age) {
  22.                 this.age = age;
  23.         }
  24.         @Override
  25.         public String toString() {
  26.                 return "Student [name=" + name + ", age=" + age + "]";
  27.         }

  28.         @Override
  29.         public boolean equals(Object obj) {
  30.                 if (this == obj)
  31.                         return true;
  32.                 if (obj == null)
  33.                         return false;
  34.                 if (getClass() != obj.getClass())
  35.                         return false;
  36.                 Student other = (Student) obj;
  37.                 if (age != other.age)
  38.                         return false;
  39.                 if (name == null) {
  40.                         if (other.name != null)
  41.                                 return false;
  42.                 } else if (!name.equals(other.name))
  43.                         return false;
  44.                 return true;
  45.         }
  46.        
  47. }
复制代码
回复 使用道具 举报
kebingxing 发表于 2015-10-1 20:39
没说清楚,最好举个例子

比较基本数据类型
2==3;
比较引用数据类型
Person p=new Person(“张三”,12);
Person p2=new Person(“张三”,12);
p==p2;false
equals比较引用数据类型
p.equals(p2);false
重写之后
p.equals(p2);true
回复 使用道具 举报
string类就是重写的
回复 使用道具 举报 1 0
iverchen 发表于 2015-10-1 12:51
通知分析得很好,我也是在这里很糊涂,回头我还要看看你的最后一句“如果想比较内容,请自己重写Object类的 ...

比如新建了一个Person类属性有name和age,新建了两个Person对象p1,p2;
如果相比较p1和p2 的name和age是否相同,就要去Person类中重写equals()方法;
@Override
        public boolean equals(Object obj) {
                if (this == obj)
                        return true;
                if (obj == null)
                        return false;
                if (getClass() != obj.getClass())
                        return false;
                Person other = (Person) obj;
                if (age != other.age)
                        return false;
                if (name == null) {
                        if (other.name != null)
                                return false;
                } else if (!name.equals(other.name))
                        return false;
                return true;
        }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马