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(){

 重写方法...

}

posted on 2018-06-06 14:39  adamal  阅读(157)  评论(0)    收藏  举报