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方法

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