Re: [心得] 序列化的小細節

看板java作者 (愚者)時間19年前 (2006/10/26 17:50), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/13 (看更多)
: 想當然爾: : System.out.println(a.b == b); : System.out.println(a.b.a == a); : System.out.println(b.a == a); : System.out.println(b.a.b == b); : 印出來的是: : true : true : true : true : 此時: : System.out.println(a.b == b); : System.out.println(a.b.a == a); : System.out.println(b.a == a); : System.out.println(b.a.b == b); : 印出來的是: : false : true : false : true Dear Pao, 請記得比較物件是用equals方法,不是用== 對於任何物件的製作我們都有責任覆寫hashCode與equals 心有餘力再寫一下toString 另外,Serialization的目的是保持同樣"內容的物件" 我可以有千百個內容相同的物件,但他們的記憶體位置都不同 ========================================================================= import java.io.Serializable; public class A implements Serializable { String sign; public A(String s) { this.sign = s; } public String toString(){ return this.sign; } public B b; } import java.io.Serializable; public class B implements Serializable { String sign; public A a; public String toString(){return this.sign;} public B(String s){ this.sign=s; } } import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class NN { A a; B b; public NN() { a = new A("A@"); b = new B("B@"); a.b = b; b.a = a; } public void makeObjectFile() throws IOException{ FileOutputStream fos = new FileOutputStream("a.object"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(a); oos.close(); fos = new FileOutputStream("b.object"); oos = new ObjectOutputStream(fos); oos.writeObject(b); oos.close(); } public Object readObjectFile(String name) throws IOException, ClassNotFoundException{ FileInputStream fis = new FileInputStream(name); ObjectInputStream ois = new ObjectInputStream(fis); Object o = ois.readObject(); ois.close(); return o; } public static void main(String[] args) throws IOException, ClassNotFoundException { NN n = new NN(); n.makeObjectFile(); B b = (B) n.readObjectFile("b.object"); A a = (A) n.readObjectFile("a.object"); System.out.println(b); System.out.println(b.a); System.out.println(a.b); System.out.println(a); } } Result: B@ A@ B@ A@ -- btw. 偷打一下廣告 [分享] 實作用serialization實現deep clone http://www.javaworld.com.tw/jute/post/view? bid=35&id=154519&sty=3&keywords=clone (http://tinyurl.com/y8tckq) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.26.34.20 ※ 編輯: qrtt1 來自: 163.26.34.20 (10/26 17:58) ※ 編輯: qrtt1 來自: 163.26.34.20 (10/26 17:58)
文章代碼(AID): #15G8JP4R (java)
討論串 (同標題文章)
文章代碼(AID): #15G8JP4R (java)