黑马程序员技术交流社区

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

作者: NNERO    时间: 2014-4-29 16:14
标题: equals方法相关
本帖最后由 NNERO 于 2014-4-29 22:05 编辑
  1. </blockquote></div><div class="blockcode"><blockquote>public class Text111
  2. {
  3.         public static void main(String[] args)throws Exception
  4.         {
  5.                 Element f = new Element("NNERO");
  6.                 Person p = new Person(9);
  7.                 f.hello(5,"St");//返回false
  8.                 f.hello("String",p);//返回false
  9.                 f.hello(5.26,9);//返回false
  10.                 f.hello(p,p);//返回true
  11.                
  12.         }
  13.         
  14. }

  15. class Element{
  16.         private String name;
  17.         Element(String name){
  18.                 this.name = name;
  19.                 System.out.println("Hello");
  20.         }
  21.         public  <E> void hello(E x,E y){
  22.                
  23.                
  24.                 System.out.println(x.equals(y));
  25.         }
  26.         public boolean equals(Object x){
  27.                 return true;
  28.         }
  29. }
  30. class Person{
  31.         private int age;

  32.         public Person(int age) {
  33.                 super();
  34.                 this.age = age;
  35.         }
  36.         public String toString(){
  37.                 return age+"";
  38.         }
  39. }
复制代码

我这里明明覆写了equals方法,为什么还是会返回false?


作者: Kelvinhu    时间: 2014-4-29 16:22
        public <E> void hello(E x, E y) {
                System.out.println(x.equals(y));
        }

没覆盖吧。
作者: Kelvinhu    时间: 2014-4-29 16:24
  1.         public static void main(String[] args) throws Exception {
  2.                 Element f = new Element("NNERO");
  3.                 //Person p = new Person(9);
  4.                 f.hello(f, "St");// 返回false
  5.                 //f.hello("String", p);// 返回false
  6.                 f.hello(f, 9);// 返回false
  7.                 //f.hello(p, p);// 返回true

  8.         }
复制代码

这样才是覆盖了,你方法又不是调用Element类中你覆盖的方法。
作者: leon_hm    时间: 2014-4-29 17:54
x.equals(y) 调用的是x对象对应的equals方法
而对于x对象,你传入的类型有int,String,double,Person。
这些都不是Element。
所以不会调用Element的equals.
你可以在你覆盖的equals方法中加一句System.out.println("element equals");
看这方法十分被调用了。
作者: NNERO    时间: 2014-4-29 22:05
我懂了,要调用Element的equals才行。理解!




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