黑马程序员技术交流社区

标题: equals的方法 [打印本页]

作者: sl123    时间: 2015-8-19 21:55
标题: equals的方法
学生类
class Student {
        private String name;
        private int age;
        private String sex;

        public Student() {
                super();
        }

        public Student(String name, int age, String sex) {
                super();
                this.name = name;
                this.age = age;
                this.sex = sex;
        }

        public String getName() {
                return name;
        }

        public void setName(String name) {
                this.name = name;
        }

        public int getAge() {
                return age;
        }

        public void setAge(int age) {
                this.age = age;
        }

        public String getSex() {
                return sex;
        }

        public void setSex(String sex) {
                this.sex = sex;
        }

        public void show(){
                System.out.println(name+age+sex);
        }

        @Override
        public String toString() {
                return "Student [name=" + name + ", age=" + age + ", sex=" + sex + "]";
        }

        @Override
        public boolean equals(Object obj) {
                if (this == obj)
                        return true;
                if (obj == null)
                        return false;
                if (getClass() != obj.getClass())
                        return false;
                Student other = (Student) obj;
                if (age != other.age)
                        return false;
                if (name == null) {
                        if (other.name != null)
                                return false;
                } else if (!name.equals(other.name))
                        return false;
                if (sex == null) {
                        if (other.sex != null)
                                return false;
                } else if (!sex.equals(other.sex))
                        return false;
                return true;
        }
       
}
测试类
public class StudentTest {

        /**
         * @param args
         */
        public static void main(String[] args) {
                Student s1 = new Student("s2",11, "男");
               
                Student s2 = new Student("s2",11,"男");
               
                System.out.println(s1.equals(s2));
        }

}

学生类的equals方法谁懂啊,?希望大牛们给详细说明一下,还有s1.equals(s2)这个方法是如何调用的呢?怎么解释啊



作者: 秋天中の夏季    时间: 2015-8-19 22:03
这个,你是想问什么,重写的equals怎么理解还是怎么调用的?
作者: 平爷    时间: 2015-8-19 22:25
同求 今天刚学  感觉也有点蒙
作者: q985274961    时间: 2015-8-19 22:31
这个方法到现在我还没弄明白
作者: burningzzy    时间: 2015-8-19 22:58
equals默认比较的是地址值,这里重写比较的是内容.相当于 public boolean equals(Object obj){                 //提高效率                 if(this==obj){                         return true;                 }                 //增强健壮性                 if(!(obj instanceof Student)){                         return false;                 }                 //比较学生姓名和年龄是否相等                 Student s =(Student)obj;                 return this.getName().equals(s.getName()) && this.getAge()==s.getAge();         }
作者: xp2015    时间: 2015-8-19 23:00
student.name.equals();
student.name是否是一个对象?

作者: mmppp    时间: 2015-8-20 17:34
Student.name是一个String类型的对象,所以可以调用Stirng类型的方法嘛.这就是链式编程而已.
String name = Student.name;
name.equals();就是这个意思.
作者: 史柯    时间: 2015-8-20 19:51
同学!shift+alt+s+h
自动生成equals方法
作者: sl123    时间: 2015-8-20 21:51
秋天中の夏季 发表于 2015-8-19 22:03
这个,你是想问什么,重写的equals怎么理解还是怎么调用的?

这两个都不是很理解,理解和调用都不太懂
作者: sl123    时间: 2015-8-20 21:54
平爷 发表于 2015-8-19 22:25
同求 今天刚学  感觉也有点蒙

是呀,老师讲的没听太明白
作者: sl123    时间: 2015-8-20 21:55
q985274961 发表于 2015-8-19 22:31
这个方法到现在我还没弄明白

求明白的大神给我们讲讲啊
作者: sl123    时间: 2015-8-20 21:57
burningzzy 发表于 2015-8-19 22:58
equals默认比较的是地址值,这里重写比较的是内容.相当于 public boolean equals(Object obj){                 //提高效率 ...

受益了,谢谢
作者: Marx_D    时间: 2015-8-20 21:58
本帖最后由 Marx_D 于 2015-8-20 22:00 编辑
burningzzy 发表于 2015-8-19 22:58
equals默认比较的是地址值,这里重写比较的是内容.相当于 public boolean equals(Object obj){                 //提高效率 ...

既然是比较内容,假如所属类不同时,但是内容相同,那么if(!(obj intance of Student))也输出false那?
作者: sl123    时间: 2015-8-20 22:04
xp2015 发表于 2015-8-19 23:00
student.name.equals();
student.name是否是一个对象?

应该是吧,可以想象成一个对象
作者: sl123    时间: 2015-8-21 21:14
mmppp 发表于 2015-8-20 17:34
Student.name是一个String类型的对象,所以可以调用Stirng类型的方法嘛.这就是链式编程而已.
String name =  ...

嗯,叫链式编程
作者: sl123    时间: 2015-8-21 21:16
史柯 发表于 2015-8-20 19:51
同学!shift+alt+s+h
自动生成equals方法

这个还真没试过
作者: 史柯    时间: 2015-8-21 21:20
sl123 发表于 2015-8-21 21:16
这个还真没试过

equals方法和hashCode方法是HashSet和HashTree依赖的方法
在你看的视频讲到集合的时候,老师才会跟你们讲这个快捷键的
作者: sl123    时间: 2015-8-21 21:41
史柯 发表于 2015-8-21 21:20
equals方法和hashCode方法是HashSet和HashTree依赖的方法
在你看的视频讲到集合的时候,老师才会跟你们讲 ...

哦,好吧,每天都讲很多新知识,记不住啊
作者: 范兵锋    时间: 2015-8-21 22:06
你这个方法直接就是eclipse中生成的
作者: small_horse    时间: 2015-8-21 23:04
原本new出来的东西打印出来是地址值的,这个没法比较,,,而重写equals方法,比较的就是s1,s2里面的内容了
作者: lf900827    时间: 2015-8-21 23:24
equals()方法默认比较的是地址值,所以一般是需要重写的,根据你重写的内容,比较的也就不同,s1.equals(s2)是比较他们两个的内容是否相同,其内容一般是成员变量
作者: sl123    时间: 2015-8-22 20:23
嗯嗯,==也默认比较的是地址值吧




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