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

标签 java overloading

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

我有两个对象。汽车1和汽车2

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

GameCar 类有 3 个私有(private)成员变量:

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",那么它就会起作用。

最佳答案

将 equals() 方法更改为:

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

请查看this post

关于java - 使用 .equals() 比较两个不同初始化的对象似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35328575/

相关文章:

java - 在应用程序销毁时保存变量不起作用

java - 恢复 Google App Engine 数据存储

ocaml - Ocaml中的重载

c++ - 试图合并两个排序的动态数组 - C++

c++ - 为什么没有在函数模板的前向引用上选择重载?

java - 使用在其他类中声明的变量

java - 未找到 HTTP 请求与 URI 的映射

java - 为什么执行 "i"后 "boolean t = true,b; b = (t || ((i++) == 0))"的值没有改变

groovy - groovy 中的方法重载