本帖最后由 didengxiaren 于 2010-07-13 14:10:03 编辑

解决方案 »

  1.   

     System.out.println(newStaff[0]==((Manager)newStaff[1]).getEmployee());
      因为他们是同一个引用。你测试下就知道了
      

  2.   

    你看的是翻译过来的书吧?
    没有断章取义吧?
    我觉得 “这不是我们所希望的” 这几个字你也要加的更红才对。
    我对这话和代码的理解是这样的:
    1:当使用 ObjectOutputStream 写一个对象时, ObjectOutputStream 会将该对象中引用的所有对象一并序列化(一起写了)。即你在2楼的问题:当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化
    2:如果写入多个对象,且这些对象之间存在引用关系(就像你的例子中 Manager 中有一个 Employee 的引用),那么你在“写”这些对象的时候需要使用同一个 ObjectOutputStream 。否则你读出来以后,就会有这个现象:执行 Employee .raiseSalary(10);  后 Manager 中的 Employee 并不会同步 。也就是说此时 Manager 中的 Employee 和外部的 Employee 是两个对象。而“这不是我们所希望的”。
    3:当使用 ObjectInputStream 读一些对象时,同一个 ObjectInputStream 所读出来的所有对象,如果这些对象在写入前有引用关系,那么读出来后,这中引用关系仍然存在。这仅仅是我的理解~~呵呵~~~~看你的了~~~~
      

  3.   

    明白了,这个在网上看的,后来看了一下core java发现是相同的例子,而且讲得很详细
    今天又看了大半天的对象序列化,哎,太慢了