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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© NNERO 中级黑马   /  2014-4-29 16:14  /  872 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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?

4 个回复

倒序浏览
        public <E> void hello(E x, E y) {
                System.out.println(x.equals(y));
        }

没覆盖吧。
回复 使用道具 举报
  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类中你覆盖的方法。

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
x.equals(y) 调用的是x对象对应的equals方法
而对于x对象,你传入的类型有int,String,double,Person。
这些都不是Element。
所以不会调用Element的equals.
你可以在你覆盖的equals方法中加一句System.out.println("element equals");
看这方法十分被调用了。
回复 使用道具 举报
我懂了,要调用Element的equals才行。理解!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马