关于java的object类
-
从getClass方法开始
没什么花头,该方法直接获取当前运行时对象的class对象
返回此对象的运行时类。返回的类对象是被表示的类的静态同步方法锁定的对象。
实际的结果类型是 Class<? extends |x|>
返回值是此对象的运行时类的类对象
-
hashcode
返回对象的哈希码值,这个方法主要是为了支持hashmap提供哈希表
在Java应用程序的执行过程中,每当在同一个对象上多次调用hashCode方法时,只要在对象的相等比较中使用的信息没有被修改,该方法就必须始终返回相同的整数。这个整数不需要在应用程序的一次执行和同一应用程序的另一次执行之间保持一致。 如果两个对象根据equals(Object)方法相等,那么对这两个对象调用hashCode方法必须产生相同的整数结果。
-
clone
拷贝当前对象(创建并返回该对象的副本),继承Cloneable接口。
拷贝需细分为浅拷贝和深拷贝
“复制”的确切含义,取决于对象的类。一般的意图时,对于任何对象x,表达式:x.clone()!=x将为真,表达式:x.clone().getclass() == x.clone()将为真虽然通常情况下:x.clone().equal(x)将为真,但这些并不是绝对的要求。按照惯例,返回的对象应该通过super.clone()来获得。如果一个类和他的所有超类都遵守这个约定,则x.clone().getClass()==x.getClass(). 按照惯例,这个方法返回的对象应该独立于这个对象(正在被克隆)。为了实现这种独立性,在返回他之前,可能需要修改super.clone()返回的对象的一个或多个字段。通常,这意味着复制包含内部“深层结构”的任何可变对象。复制的对象,并将对这些对象的引用替换为对副本的引用。如果一个类只包含基本字段或对不可变对象的引用,那么通常super返回的对象中没有字段。
注意,所有数组都被认为是实现接口可克隆的,数组类型T[]的克隆方法的返回类型是T[],其中T是任何引用或基本类型。否则,该方法创建该对象类的新实例,并使用该对象对应字段的内容初始化其所有字段,就像通过赋值一样,字段的内容本身没有被克隆。因此,该方法执行“浅复制”。
简单来说,在浅克隆中,当对象被复制时只复制它本身和其中包含的值类型的成员变量,而引用类型的成员对象并没有复制。
public class Student implements Cloneable{
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public Object clone(){
Student stu = null;
try {
stu = (Student) super.clone();
}catch (CloneNotSupportedException e){
e.printStackTrace();
}
return stu;
}
public static void main(String[] args) {
Student stu = new Student();
stu.setId(2222);
Student stu_c = (Student)stu.clone();
System.out.println("stu:" + stu.getId());
System.out.