不重写toString()方法是否始终为对象返回相同的值?

时间:2014-10-04 13:45:37

标签: java object hashmap

我有两个班级(例如汽车和自行车)。两个类的对象都被发送到管理层,在那里使用它们。 我通过调用layerHandler.objectReceived(object);

将每个对象发送到该层

然后,LayerHandler需要将此对象存储在其HashMap中(我正在使用Object,因为存储在那里的对象不是同一类型......(Car and Bicycle))

LayerHandler还有其他方法叫做actionFired(String message,Object object); 第二个参数'对象'属于Car或Bicycle类,并且已经存储在LayerHandler的HashMap中。当这个方法发生时,我需要找到存储在HashMap中的相关对象。

现在我使用object.toString()作为hashmap的键值。两种类型的对象都使用defaut toSting()方法,该方法未被覆盖。

我不会在这里显示我的项目的整个结构,但我使用HashMap是有原因的。 (我知道ArrayList get(Object obj)方法在这里会很好,但我必须使用HashMap)

我需要知道,toString()是否总会返回不会随时间变化的相同值,因此我可以将其用作HashMap的键。

2 个答案:

答案 0 :(得分:0)

如果你没有覆盖.toString()那么,对于给定的实例,它将在整个实例的生命中继续返回相同的字符串。但很有可能的是,一旦这个实例被垃圾收集,这个类的另一个实例甚至另一个类将被分配到同一个内存块,并将返回与此实例相同的字符串。

但不是使用String作为关键字,最好更改actionFired以提供对象而不是字符串表示。这样做非常脆弱,如果你的实现稍后改变,它可能会全部破坏。

答案 1 :(得分:0)

如果你提供hashCode + equals的正确实现,那么在HashMap中有不同类型的键是没有限制的。

  1. 您应该在键对象类(Car,Bicycle,...)中覆盖hashCode + equals方法
  2. 直接将这些对象用作HashMap中的键