Java object类
函数
-
tostring()
-
equals()
-
hashcode()
-
clone() 深拷贝
深拷贝与浅拷贝:
对于每个类是否允许被拷贝,则在于是否实现了Cloneable接口
然后在类中override clone()函数,其中在clone函数中使用super.clone()即可返回一个clone对象再接着强制转换即可。但这只是浅拷贝。
如果类中存在引用类型的数据字段,如Person类中声明了Book类引用类型数据字段,在Person()构造函数中实现Book book1= new Book(),然后在main函数中有 Person p1 = new Person();
Person p2 = p1.clone(),则此时p2所得到的仍然是book1。要想深拷贝,即需要对Book 类型实现Cloneable接口,覆写clone函数,然后在Person的clone中调用Book 类的clone函数。
关键代码:
// 浅拷贝
class Book {
}
class Person implements cloneable{
public Book book1 = new Book();//记book1为 “Java入门”
@Override
public Object clone(){
return super.clone();
}
main(){
Person p1 = new Person();
Person p2 = (Person)p1.clone();//p2 与p1共同持有书籍 “Java入门”
}
//深拷贝
class Book implements cloneable{
@Override
public Object clone(){
return super.clone();
}
}
class Person implements cloneable{
public Book book1 = new Book();//记book1为 “Java入门”
@Override
public Object clone(){
Person p = (Person)super.clone();
p.book1 = (Book)book1.clone() //对"Java入门"复制了一本新书记为“Java入门-副本”
return p;
}
main(){
Person p1 = new Person();
Person p2 = (Person)p1.clone();//p2 持有书籍 “Java入门-副本”
}
5.getClass()