重写equals方法后执行结果不对

来源:9-9 Java 中的 Object 类 Ⅱ

fenkapian

2016-03-19 06:37

che和NSX的color,我都赋值为白色啊,结果应该为same啊。代码如下:

package com.benz;


public class IntialinCar {

public static void main(String[] args) {

Car che = new Car();

che.color = "baise";

// che.engine = 4;

// che.speed = 100;

Honda NSX = new Honda();

NSX.color = "baise";

// NSX.engine = 4;

// NSX.speed = 100;

NSX.run();

//NSX.cheJiaHao(4);

Honda bentian = new Honda();

//bentian.cv();

System.out.println(bentian);

NSX.color = "baise";

bentian.color = "c";

if(che.equals(NSX)){

System.out.println("same");

}else{

System.out.println("no.");

}

}

}


写回答 关注

3回答

  • 慕后端2198842
    2016-03-20 22:13:35

    你这只是比较了 两个引用的指向地址,当然是不同的

  • 风羽_0001
    2016-03-20 10:27:50

    你注意下视频中老师用的是父类Dog创建的两个对象比较,而你一个是父类创建对象,一个是子类创建的对象,这时,重写equals方法是无效(我也不知道为什么),返回的还是不同。而用无论你进不进行方法重写,if((che.color).equals(NSX.color))都可以达到你的目的,返回相同

  • 风羽_0001
    2016-03-19 09:05:10

    if(che.equals(NSX))要改成if((che.color).equals(NSX.color))。没改前,如果if((che.color).equals(NSX.color))是比较两个color的内存地址,方法重写后比较的是它们的值。而对color的方法重写与if(che.equals(NSX)无关,它们比较的还是che和NSX的内存地址。

    fenkap...

    但是我看慕课老师视频里的例子,equals方法里就没有比较属性值啊,直接比较对象,然后程序就比较对象的属性值

    2016-03-19 23:22:42

    共 1 条回复 >

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530560 学习 · 6091 问题

查看课程

相似问题