我收到了这段代码:
System.out.println("Enter the brand and cash value");
String brand = keyboard.nextLine();
long cash = keyboard.nextDouble();
String buffer = keyboard.nextLine();
但即使我输入我想要比较的确切字符串值,它也无法识别它们是相同的。奇怪的是,当我输入这个:
compare[0] = new Car ("BMW", 12.00);
而不是:
compare[0] = new Car (brand, 12.00);
它有效
我也使用equals:
public boolean equals(Car other)
{
if (other == null)
{
return false;
}
if(this.brand == other.brand && this.cash == other.cash)
{
return true;
}
else
{
return false;
}
}
答案 0 :(得分:2)
您正在使用==
来测试字符串相等性,"BMW"
是字符串文字,它是在池中实现的,而brand
则不是。{1}}。换句话说,如果你有:
String s1 = "BMW";
String s2 = "BMW";
String s3 = getString(); //receives "BMW" from the scanner
s1 == s2
是真的
s1 == s3
是假的
s2 == s3
是假的
s1.equals(s2)
是真的
s1.equals(s3)
是真的
s2.equals(s3)
是真的
底线:您应该使用equals
来比较字符串。
您可以在this post中了解更多相关信息。
修改强>
在equals
方法的代码中,您需要更改
if(this.brand == other.brand && this.cash == other.cash)
到此:
if(this.brand.equals(other.brand) && this.cash == other.cash)
另请注意,equals
还存在一些其他问题 - 尤其是它不会覆盖等于:它应该是public boolean equals(Object o)
编辑2
例如,你可以像这样实现你的equals方法(它假设品牌不能为null - 如果不是你需要处理那个特定情况的话)
@Override
public boolean equals(Object obj) {
if (obj == null || getClass() != obj.getClass()) {
return false;
}
final Car other = (Car) obj;
return (this.cash == other.cash && this.brand.equals(other.brand));
}
请注意,您还应该覆盖hashcode
方法。
答案 1 :(得分:1)
您需要使用
this.brand.equals(other.brand)
在if
子句中而不是
this.brand == other.brand
==
用于检查String的引用及其值..
在这种情况下,您的值相同但不是参考。
因此您需要使用equals
因为它仅用于检查值
那就是你想做的事情。
答案 2 :(得分:0)
使用java.lang.Object
与我在下面显示的相同方法
public boolean equals(Car other)
{
if (other == null)
{
return false;
}
if(this.brand.equals(other.brand) && this.cash.equals(other.cash))
{
return true;
}
else
{
return false;
}
}