Object类–所有类的超类(二)
toString()方法
toString()方法用于将对象的值以字符串的形式返回,但是Object类的toString()方法默认返回的是类名和散列码。
例如:
public class Book{
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) throws CloneNotSupportedException {
Book book1 = new Book();
Book book2 = new Book();
book1.setId(0);
book1.setName("java面向对象程序设计");
book2.setId(1);
book2.setName("数据结构和算法");
System.out.println(book1.toString());
System.out.println(book2.toString());
}
}
我们一般会重写toString方法,让它返回对象的状态信息。
@Override
public String toString() {
// TODO Auto-generated method stub
return "[id = " + id + ",name = " + name + "]";
}
clone()方法
protected Object clone() throws CloneNotSupportedException
clone的中文意思即“克隆”,clone方法创建并返回此对象的一个副本,副本应该满足下面几个要求:
(1)跟此对象是不同的对象,即x.clone() != x为true;
(2)跟此对象属于同一类的对象,即x.clone().getClass () == x.getClass()为true;
(3)一般情况下跟此对象是相等的,即x.clone.equals(x)为true。
public class Book implements Cloneable{
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean equals(Object arg0) {
if (this == arg0) {
return true;
} else if (arg0 == null) {
return false;
} else if (this.getClass() != arg0.getClass()) {
return false;
} else {
Book book = (Book) arg0;
if (this.id == book.id && this.name.equals(book.name)) {
return true;
}else {
return false;
}
}
}
public static void main(String[] args) throws CloneNotSupportedException {
Book book1 = new Book();
book1.setId(1);
book1.setName("java面向对象程序设计");
Book book2 = (Book) book1.clone();
if (book1 == book2) {
System.out.println("它们是同一个对象");
}else {
System.out.println("它们是不同的对象");
}
if (book1.getClass() == book2.getClass()) {
System.out.println("它们是同一个类的对象");
}else {
System.out.println("它们不是同一个类的对象");
}
if (book1.equals(book2)) {
System.out.println("它们是相等的对象");
}else {
System.out.println("它们是不相等的对象");
}
}
}
注意:如果对象的类不支持 Cloneable 接口,则对该类对象进行拷贝会报CloneNotSupportedException异常。
Object中的clone()方法默认实现的是浅拷贝,如果对象中有可变域,则需要重写clone()方法,并对可变域也进行拷贝,实现深拷贝。