can equals()判断一个发送然后收回的对象实际上是否相同?

时间:2013-04-21 11:28:58

标签: java serialization client-server

我使用OCSF框架解释here,假设我使用sendToServer(Object msg)发送originalMssg,它使用带有套接字的java的Object流在客户端,然后在服务器端运行sendToClient(Object msg) )mssg对象与我从该客户端收到的对象相同。

现在,考虑一下在客户端代码从服务器收回mssg后调用的以下回调:

@Override
protected void handleMessageFromServer(Object msg) {
  System.out.println(msg.equals(originalMssg));

}
  1. 在上面的场景中它会一直打印出来吗?
  2. 如果不是在什么情况下不会?是否有可能让它永远回归真实?
  3. 如果在所有情况下它都返回false,你如何标记你的mssg对象,以便在它从服务器返回时能够识别它?

2 个答案:

答案 0 :(得分:1)

(这纯粹基于阅读OSCF网站和javadocs ... YMMV)

该网站称OSCF发送和接收可序列化的普通Java对象(PO​​JO)。由此我推断msg对象可以是任何可序列化类的实例。

  

在上面的场景中它会一直打印出来吗?

不可能说。这取决于实际类如何实现equals

  

如果不是在什么情况下不会?

不可能说(见上文)。

  

是否可以使它始终返回true?

嗯......您需要在发送/接收的班级上更改equals方法的实现。

  

如果在所有情况下都返回false ...

不可能说这个先决条件是否成立(见上文)。


底线。 msg是您自己实现或选择的某个类的实例。您可以使用符合您要求的equals行为来实现/选择它...包括(显然)与从客户端到服务器再往返的对象实例的比较

答案 1 :(得分:1)

OSCF的主要内容是发送String或字符串数​​组.....所以首先检查您的对象是否为serializable

然后,您为每个课程equals提供@Override方法。

1)NO。

2)几乎任何时候它都是假的,你可以尝试发送一个字符串一个对象,你应该成真。

3)请参阅我对我的回答的介绍。