使用 .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
我的问题:我有 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