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

问题描述:

我有两个班级(如汽车和自行车)。这两个类的对象都发送到管理层,在那里使用它们。 我通过调用layerHandler.objectReceived(object)将每个对象发送到该图层;不重写toString()方法是否总是返回对象的相同值?

LayerHandler那么需要把这个对象存储在其的HashMap(即时通讯使用的对象,因为这将被存储的对象有没有同类型的...(汽车和自行车))

LayerHandler有一个名为actionFired(字符串其他方法消息,对象对象); 第二个参数'object'属于Car或Bicycle类,并已存储在LayerHandler的HashMap中。当这个方法发生时,我需要找到存储在HashMap中的相关对象。

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

我不打算在这里显示我的项目的整体结构,但我使用HashMap的原因。 (我知道ArrayList get(Object obj)方法在这里不错,但我必须使用HashMap)

我需要知道,toString()是否会始终返回相同的值,这将不会随着时间而改变,所以我将能够用它作为我的HashMap的关键。

+0

的答案取决于实现您存储在哈希映射中的对象。 – 2014-10-04 13:50:05

+0

要标识JAVA提供的对象的对应类名称,object_name.getClass()。getName()。所以通过使用这个逻辑,你可以确定对象是TYPE Car还是Bycycle。希望我帮助你。 – Programmer 2014-10-04 13:56:17

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

但不是使用String作为关键字,您最好将actionFired更改为给予对象而不是字符串表示形式。这样做非常脆弱,如果稍后实施更改,它可能会全部中断。

+0

好的,我会尽量调整我的代码。并感谢您的回复。这正是我需要的答案。我会将其标记为已接受。 – 2014-10-04 15:37:27

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

  1. 你应该重写了hashCode +等于在你的关键对象类的方法(汽车,自行车,...)
  2. 直接在HashMap中使用这些对象作为键