java对象克隆一个新类以及两个类对比是否相等

来源:互联网 发布:linux 退出sqlplus 编辑:程序博客网 时间:2024/06/05 10:44

遇到一个需求,进入界面以后,从服务器得到数据,定义成一个类,在点击提交按钮之前,对类的数据进行修改,如果提交的时候,放弃修改,则不提交。

这就要求,在正式提交服务器之前,不应该在本地的类上边修改,应该在一个新类上修改,如果用户放弃修改,不应该影响本地的类,如果提交成功,再对本地的类修改。
在提交之前,需要用新类与本地类进行对比,看是否已变化

不应该使用=赋值,因为对象使用=赋值,两个对象指向同一个地址,一个修改,两个类都会变化

如果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));

打印的值是

111111true

修改一下

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));

打印的值

113111false

参考文章:
Java提高篇——对象克隆(复制)
如何重写Java中的equals方法

0 0
原创粉丝点击