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 (name == null) { ...
要看比较的目的了,是比较对象(引用)还是比较实际值了。默认equals在比较俩个对象的时候,是看他们是否指向同一个地址的。但有时候我们希望比较俩个对象的某些属性值是否相同,如果相同的话就认为他们的equals为true。比如:Student s1 = new Student(1,”name1”); Student s2 = new Student(1,”name1”);如果用默认的equals比较...
那你有没有想过如果两个对象有成百上千个属性呢?直接调用需要将每个属性都进行比较,哪怕只有一个属性不等就是不同的,这样工作量无疑非常巨大,而重写equals方法,计算机自动生成代码就简单多了
if(this.equals(course.name)){ return true;}这句有问题;应该是if(this.name.equals(course.name)){ return true;}名字的比较,而不是拿一个当前的对象(this)与传入对象的name属性(course.name)比较
请问下重写equals方法时 将obj强转为Course类型是为什么
共1个回答因为开始这个这里是比较课程啊,你传进来的obj开始就是一个Course对象,只不过传进来的时候是向上转型自动转程Object类,而在equals方法中需要比较Course里面的属性内容,所以就要把传进来的Obj再强制转型为Course。还有就是如果传进来的不是Course对象,是不可能走到这一步的,因为前面有instanceof来比较是不是Course对象。
重写equals方法的时候,这里的this.name.equals(course.name)调用了一次
共4个回答不会。你重写的只是当前类的equals(),this.name应该是个字符串吧,而字符串的equals你是没法重写的。呵呵,说起来当初我学java的时候也问过这个问题,如今虽然还没修炼成大神,但一直在走向大神的路上,采纳我吧:D, 哥看好你。
if (getClass() != obj.getClass()) return false; Dog other = (Dog) obj;这句话,能执行到Dog other = (Dog) obj;就说明this.getClass()==obj.getClass,说明obj也是Dog类对象,只不过是用Object类的引用指向了这个对象,所以下面要把obj的类型...
此时此刻,你的obj是类型是Object(因为你equals的方法中传递过来的是一个Object),你使用了instanceof只是用来判断你的obj是不是Course的一个实例,但obj本身自己还是一个Object类型。如果你不进行一次强转,那么obj就无法访问到Course的成员变量和方法,那接下来的course.name这种代码编译器都会自动报错!所以一定要进行一次强转,obj才会真正变成C...