问答详情
源自:9-9 Java 中的 Object 类 Ⅱ

帮忙看下这样一段代码 关于equals

父类:
public class fu {
 String fuName ="一";
}

子类:
public class zi extends fu{
 String ziName ="一";
 public void fun(){
  if(fuName.equals(ziName)){
   System.out.println("同");
  }
  else{
   System.out.println("不同");
  }
 }
}

主函数:
public class main {
public static void main(String[] args) {
   zi Zi =new zi();
   Zi.fun();
 }
}

      不重写equals,equals会自动比较地址是否相同。
      在这里,new子类等于同时new了一个父类。个人理解为子类和父类在内存中的地址不同.所以无论fuName和ziName的值是否相同,都输出“不同”。
     但是这个程序里的equals并没有比较fuName和ziName的地址,是直接比较的值,可以正确判断是否相同。
      同样new两个不同名子类,equals就开始比较地址了。

这是为什么呢? 刚刚自学了几天  基础不行,懂得不多,跪等解答



提问者:Goldberg 2016-02-17 17:36

个回答

  • 张三十
    2016-02-17 18:22:18

    个人想法,仅供参考

    创建子类对象时 出现的是子类对象 ,初始化过程中调用构造方法是先调用父类构造方法再继续子类的构造方法,但是并不会产生父类对象,所以在使用equals时如果比较当前的子类和其父类(没有创建父类对象情况下)其实比较的是同一存储区域。

    但要是创建两个不同的子类对象时比较的是两个不同的存储空间