一般来说, 用户自己定义的类也应当提供合适的equals() 方法, 特别是当程序要将其对象放入JAVA API 所提供的对象容器类的时候。
1.对象的复制
2.clone()的使用
3.对象实例的比较
////////////////////
//
/////////////////////
1.对象的复制
String str1 = "This is a string!" //这里是 "对象引用" 的复制
String str2 = new String(str1); //这里是 "对象实例" 的复制
浅复制: 只复制复合对象本身.
深复制: 除了复制复合对象本身, 还复制了复合对象的引用的对象实例.
例如:
class Pupil{
public Pupil(String sno, String name, int age){
this.sno = new String(sno);
this.name = new String(name);
this.age = age;
}
public String getSno() {
return sno;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private String sno;
private String name;
private int age;
}
public class CopyDemo {
public static Pupil[] shallowCopy(Pupil[] aClass) {
Pupil[] newClass = new Pupil[aClass.length];
//此时newClass 与aClass 指向同一块内存
for(int i=0; i
newClass[i] = aClass[i];
return newClass;
}
public static Pupil[] deepCopy(Pupil[] aClass) {
Pupil[] newClass = new Pupil[aClass.length];
//此时newClass 与aClass 的相应sno , name 指向同一块内存
for(int i=0; i
String sno = aClass[i].getSno();
String name = aClass[i].getName();
int age = aClass[i].getAge();
newClass[i] = new Pupil(sno, name, age);
}
return newClass;
}
public static Pupil[] deeperCopy(Pupil[] aClass) {
Pupil[] newClass = new Pupil[aClass.length];
//完全的复制
for(int i=0; i
String sno = new String(aClass[i].getSno());
String name = new String(aClass[i].getName());
int age = aClass[i].getAge();
newClass[i] = new Pupil(sno, name, age);
}
return newClass;
}
}
2.clone()的使用
* Object.clone()
* Cloneable 接口
* CloneNotSupportedException
a. 使用Object.clone 进行复制