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
- java对象克隆一个新类以及两个类对比是否相等
- java中判断一个类的对象是否相等问题
- java中判断两个对象是否相等
- 判断java中两个对象是否相等
- 判断java中两个对象是否相等
- 判断java中两个对象是否相等
- 判断java中两个对象是否相等
- 比较两个对象是否相等
- 判断两个对象是否相等
- 学习体会:在JAVA中如何判断两个对象是否相等
- 两个数组是否相等 java
- java中判断类对象是否相等的方法
- Collection判断两个对象是否相等
- [AS3]判断两个对象是否相等
- JavaScript比较两个对象是否相等
- C#判断两个对象是否相等
- 判断两个obj对象是否相等
- JS判断两个对象是否相等
- [C++][基础概念]main函数中的参数argc和argv的含义和用法
- [Swift]WKWebView用法介绍
- 中南大学第十一届大学生程序设计竞赛-COJ1898-复盘拉火车
- Hmz 的女装 详细题解
- Android数据存储和访问
- java对象克隆一个新类以及两个类对比是否相等
- python2与python3的版本差别
- LeetCode 55. Jump Game
- 数位DP(ZOJ 3777,Problem Arrangement)
- JavaEE微框架之Spring Boot
- 挑战P240 poj2175 最小费用最大流(TLE)
- 以原型构造新对象的两种方式
- RTP, RTCP, RTSP 协议介绍
- 在最美的时候,你遇见了谁?