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

Comparing two differently initialized objects doesn't seem to work using .equals()

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

我有两个对象。 car1 和 car2

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

GameCarclass有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 设置为完全相同,它仍然 return是假的。

但是--- 如果我在重载的 equals() 中设置 name="something" 和 car.name="something",那么它会工作。

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

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

请检查this post

你可能运行陷入

的区别
name.equals(car.name)

name == car.name

见: String comparison and String interning in Java