java對象克隆一個新類以及兩個類對比是否相等

遇到一個需求,進入界面以後,從服務器得到數據,定義成一個類,在點擊提交按鈕之前,對類的數據進行修改,如果提交的時候,放棄修改,則不提交。

這就要求,在正式提交服務器之前,不應該在本地的類上邊修改,應該在一個新類上修改,如果用戶放棄修改,不應該影響本地的類,如果提交成功,再對本地的類修改。
在提交之前,需要用新類與本地類進行對比,看是否已變化

不應該使用=賦值,因爲對象使用=賦值,兩個對象指向同一個地址,一個修改,兩個類都會變化

如果new一個新對象,將老對象的值一個一個set到新對象,雖然能實現,但是如果屬性比較多,則比較麻煩

好的辦法就是重寫類的clone方法以及equals方法

 class Student implements Cloneable{  
                private int number;  
                private String name;


                public int getNumber() {  
                    return number;  
                }  

                public void setNumber(int number) {  
                    this.number = number;  
                }  

                public String getName() {  
                    return name;  
                }  

                public void setName(String name) {  
                    this.name = name;  
                } 

                public Object clone() {  
                    Student o = null;  
                    try {  
                        o = (Student) super.clone();  
                    } catch (CloneNotSupportedException e) {  
                        e.printStackTrace();  
                    }  
                    return o;  
                } 

                @Override
                public boolean equals(Object obj) {
                    // 如果爲同一對象的不同引用,則相同
                    if (this == obj) {
                        return true;
                    }
                    // 如果傳入的對象爲空,則返回false
                    if (obj == null) {
                        return false;
                    }

                    // 如果兩者屬於不同的類型,不能相等
                    if (getClass() != obj.getClass()) {
                        return false;
                    }

                    // 類型相同, 比較內容是否相同
                    Student other = (Student) obj;

                    return number == other.number&&
                            name.equals(other.name);
                }

            } 

        Student s=new Student();
        s.setNumber(111);
        s.setName("123");
        Student ss=(Student) s.clone();
        ss.setNumber(111);
        ss.setName("123");
         System.out.println(s.getNumber());
         System.out.println(ss.getNumber());
         System.out.println(s.equals(ss));

打印的值是

111
111
true

修改一下

Student s=new Student();
        s.setNumber(113);
        s.setName("123");
        Student ss=(Student) s.clone();
        ss.setNumber(111);
        ss.setName("123");
         System.out.println(s.getNumber());
         System.out.println(ss.getNumber());
         System.out.println(s.equals(ss));

打印的值

113
111
false

參考文章:
Java提高篇——對象克隆(複製)
如何重寫Java中的equals方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章