Object
是类层次结构的根类,所有的类都直接或者间接的继承自Object类。Object类的构造方法有一个,并且是无参构造。
- 常用方法:
toString()
返回对象的字符串表示,默认是由类的全路径+'@'+哈希值的十六进制
表示。这个表示其实是没有意义的,一般子类都会重写该方法。注意:直接输出一个对象名称,其实默认调用了该对象的toString()方法。equals()
比较两个对象是否相同。默认情况下,比较的是地址值是否相同。而比较地址值是没有意义的,所以,一般子类也会重写该方法。hashCode()
返回对象的哈希值。不是实际地址值,可以理解为地址值。getClass()
返回对象的字节码文件对象,多用于反射。finalize()
用于垃圾回收,在不确定的时间JVM清理。clone()
可以实现对象的克隆,包括成员变量的数据复制,并且克隆的对象和原对象不是同一个。
类需要实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。
class Student implements Cloneable{
String name;
int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
if (age != student.age) return false;
return name != null ? name.equals(student.name) : student.name == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public class StudentDemo {
public static void main(String[] args) {
Student s1 = new Student("jack", 22);
System.out.println(s1);
System.out.println(s1.getClass().getName() + '@'
+ Integer.toHexString(s1.hashCode()));
Student s2 = s1;
System.out.println(s2);
Student s3 = null;
try {
s3 = (Student) s1.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
System.out.println(s3);
System.out.println(s1==s2);
System.out.println(s1==s3);
System.out.println(s1.equals(s3));
s1.setAge(25);
System.out.println(s2);
System.out.println(s3);
}
}
输出:
Student{name='jack', age=22}
测试.Student@6035417
Student{name='jack', age=22}
Student{name='jack', age=22}
true
false
true
Student{name='jack', age=25}
Student{name='jack', age=22}