本帖最后由 jw在路途 于 2014-8-12 11:36 编辑
老师讲解加上个人理解的小结: Object类与toString()方法及 equals 与 == 两者用途的理解; Object类: 是类层次结构的根类。每个类都使用 Object 作为超类(所有的类都 直接或者间接的继承自该类)。所有对象(包括数组)都实现这个类的方 法。 //所以当子类需要完成某些特定的功能时,建议重写父类的方法以达到需求。 下面是个人画的草图,乐呵乐呵,见笑了: Object类中的常见方法: A:public String toString(): 返回对象的字符串表现形式。 输出语句直接输出对象的名称的时候,其实是调用了该对象的toString()方法。 而该方法默认情况下输出的是类名@哈希值的十六进制。 、 例如: public class StudentDemo { public static void main(String[] args) { Student s = new Student(); // System.out.println(s); // cn.itcast_01.Student@75f10df7 // 地址值的组成 // System.out.println(s.toString());// cn.itcast_01.Student@75f10df7 // 返回s(地址值)的字符串表现形式 } } 建议重写。 由上可看出: 默认情况下,返回的是类名+@+十六进制的哈希值组成,意义不大。 所以需要重写该方法。 怎么重写? a:手动式: //你想比较对象的成员变量,只需要比较每一个成员即可。 //如果是基本类型,用 ==,如果是引用类型,用那个引用类型本身的equals()。 @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof Teacher) { Teacher t = (Teacher) obj; return this.name.equals(t.name) && this.age == t.age; } return false; b:自动式 : 自动生成(快捷功能) 它的值等价于: getClass().getName() + '@' + Integer.toHexString(hashCode()) Integer: public static String toHexString(int i) Object类中的常见方法: B:public final Class getClass():返回的是字节码对象,反射内容。 C:public int hashCode():返回对象的哈希值。这个值不是实际的地址值,但是可以理 解为地址值。 D:protected void finalize():被对象的垃圾回收器调用,用于回收垃圾的。 E:public boolean equals(Object obj) ==的作用: 比较基本类型:比较的是基本类型的值是否相同。 比较引用类型:比较的是引用类型的地址值是否相同。 equals(); public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。 默认情况下,Object类的equals比较的是地址值。 所以,如果你想比较成员变量的值,请重写该方法。
|