使用.equals()比较两个不同的初始化对象似乎不起作用

时间:2016-02-11 00:17:23

标签: java overloading

我的问题:我有2个对象,想要使用重载的.equals()来比较被比较的两个对象的名称和颜色属性,如果它们相同,它将返回true。

我有两个对象。 car1和car2

GameCar car1 = new GameCar ("MyBuddy", "Red", 19);
GameCar car2 = new GameCar();

GameCar类有3个私有成员变量:

private String name;
private String color;
private int position;

以下是GameCar的两个构造函数 -

GameCar()
{
    name = null;
    color = null;
    position = 0;
}

GameCar(String n, String c, int p)
{
    name = n;
    color = c;
    position = p;
}

为了让car2获取其信息,我有这个:

car2.getCarInfo();

getCarInfo()的定义 -

public void getCarInfo()
{
    Scanner keyboard = new Scanner(System.in);
    System.out.print("Enter the car name: ");
    name = keyboard.next();
    System.out.print("Enter the color: ");
    color = keyboard.next();
    System.out.print("Enter the starting position: ");
    position =  keyboard.nextInt();
}

现在这里是equals()重载函数 -

public boolean equals(GameCar car)
{
    if (name == car.name) return true;
    return false;
}

这是我使用equals() -

的地方
System.out.println("Same cars? " + car1.equals(car2));

由于某种原因,equals()函数,即使我在进入equals()之前将car2.name和car1.name设置为完全相同,它仍会返回false。

然而 ---如果我在重载的equals()中设置了name =“something”和car.name =“something”,那么它就可以了。

2 个答案:

答案 0 :(得分:2)

将您的equals()方法更改为:

public boolean equals(GameCar car)
{
    if (name.equals(car.name)) return true;
    return false;
}

请检查this post

答案 1 :(得分:0)

你可能遇到了

之间的区别
name.equals(car.name)

name == car.name

请参阅: String comparison and String interning in Java