相关疑难解决方法(0)

什么是Java中的字符串池?

我对Java中的StringPool感到困惑.我在阅读Java中的String章节时遇到过这个问题.请以外行的方式帮助我理解StringPool实际上做了什么.

java

65
推荐指数
4
解决办法
11万
查看次数

Java 1.7覆盖hashCode()的行为与我的预期不符

我有一个类,我已经覆盖了hashCode方法和equals方法.equals方法的行为与我期望的一样,但hashCode方法似乎没有像我期望的那样运行.我假设因为我的期望是不正确的,但不知道为什么.以下是重写方法:

public class Car extends SomeBaseClass implements Cloneable, Serializable {
private static final long serialVersionUID = 1L;
private String id;
private String name;
private String carName;
private String carModel;
private String displayTextCar;


public boolean equals(Car car)
{
    return (getCarName().equals(car.getCarName())  && getCarModel().equals(car.getCarModel()));
}

public int hashCode()
{
    return (this.getCarName() + this.getCarModel()).hashCode();

} 
Run Code Online (Sandbox Code Playgroud)

现在我有一个测试类,在其中创建两个car对象,并调用equals方法,然后将每个car实例放入HashMap.我将每个实例设置为具有相同的汽车名称和模型,并且调用equals方法实际上返回true.然而,即使每个实例返回相同的hashCode,当我将它们添加到HashMap时,它将两个对象保留在Map中,而我希望第二个put替换地图中的第一个对象??? 以下是测试类的内容:

HashMap<Car,String> testMap;

Car testCar1 = new Car();
testCar1.setCarName("DaveCar");
testCar1.setCarModel("DaveModelTest");
System.out.println("Car Hash 1: " + testCar1.hashCode());

Car testCar2 = new Car();
testCar2.setCarName("DaveCar");
testCar2.setCarModel("DaveModelTest");
System.out.println("Car Hash 2: " + …
Run Code Online (Sandbox Code Playgroud)

java equals hashcode

4
推荐指数
2
解决办法
634
查看次数

标签 统计

java ×2

equals ×1

hashcode ×1