JAVA常用API:Object类
Object是超类,一切类都是Object的子类,Object有很多方法供其它类重写,如equals() tostring()等。所有对象(包括数组)都实现这个类的方法
Object类是顶级类,没有什么类是Object的父类。
一、Object的构造方法
其它所有类的构造方法第一行都是super(),只有Object类的第一行是Object(),空参的构造方法。
接口不继承Object类,因为接口没有构造方法
二、方法 equals() :其它对象与此对象是否相等
//源代码:
function boolean equals(Object obj){
return (this==obj); //返回this(调用者)与对象obj的比较结果
}
-----------------------
public class Person{
private String name;
private int age;
public Person(){}//空参构造器
//构造方法
public Person(String name,int age){
this.name = name;
this.age = age;
}
}
------------------
//main中
Person p1 = new Person("lisa",18);
Person p2 = new Person("adam",20);
boolean b = p1.equals(p2);
结果:b为false,因为在引用类型中,比较的是对象的内存地址
但是,比较两个对象的内存地址是没有意义的,如果我们要比较上例中两个对象的age是否相等呢
这就需要重写equals方法
public boolean equals(Object obj){
return this.age == obj.age; //这里是错误的,因为父类obj不能调用子类的特有内容,必须要将obj向下转型到Person
return this.age == (Person)obj.age;
}
首先,如果是同一对象对比,就可以直接返回true,没有必要比较 p1.equals(p1)
第二,如果传入的参数不能强转为Person类型,也可以不必比较,直接返回false
所以,上面重写的方法可以优化为
public boolean equals(Object obj){
if(this==obj){
return true; //如果自已和自已比,直接返回true;
}
if(this ==null){
return false;
}
if(obj instanceof Person){ //如果可以转为Person类则进行下一步比较
return this.age== (Person)obj.age;
}else{
return false;
}
}
三、方法toString(),由父类继承过来
源代码,返回的是内存地址
- 返回该对象的字符串表示。通常,
toString方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。Object类的toString方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:getClass().getName() + '@' + Integer.toHexString(hashCode())
- 返回:
- 该对象的字符串表示形式。
public String toString(){
return this;
}
//重写
public String toString(){
重写方法...
}
浙公网安备 33010602011771号