位于rt.jar\java\lang\Object.class
Object类是所有Java类的根基类(Java中只有一个根基类,C++中有多个)。如果在类声明中未使用extends关键字指明其基类,则默认其基类为Object类。
所有对象,包括数组,都实现了Object类的方法。
1、toString()方法
蓝色高亮行代码等价于d.toString()。输出:d:=Dog@757aef。重写toString()方法:
2、哈希编码
3、equals()方法
例题:
public class TestEquals{ public static void main(String args[]){ Cat c1=new Cat(1,2,3); Cat c2=new Cat(1,2,3); System.out.println("c1==c2: "+(c1==c2));//false System.out.println("c1.equals(c2): "+c1.equals(c2));//false } } class Cat{ int colour; int high; int weight; public Cat(int c,int h,int w){ colour=c; high=h; weight=w; } }
注意:都返回false。因为比较两个对象时,c1==c2比较的是地址,c1.equals(c2)默认也是如此(只有当c1,c2指向同一对象时为true)。所以应重写equals()方法。
//重写equals()方法 public boolean equals(Object obj){ if(obj==null){ return false; } else if(obj instanceof Cat){ Cat c=(Cat) obj; if(c.colour==this.colour&&c.high==this.high&&c.weight==this.weight){ return true; } } return false; } }
重写equals()方法后,输出c1==c2:false,c1.equals(c2):true。
JDK提供的一些类(如String,Date等),重写了Object的equals方法,调用这些类的equals方法时,x.equals(y),当x和y所引用的对象是同一类对象且属性相等时(并不一定是相同对象),返回true,否则返回false。对于用户自定义类型,可根据需要重写equals方法。
public class TestEquals{ public static void main(String args[]){ String s1=new String("hello"); String s2=new String("hello"); System.out.println("s1==c2: "+(s1==s2));//false System.out.println("s1.equals(s2): "+s1.equals(s2));//true } }