首页 > 编程笔记 > Java笔记 阅读:13

Java中的Object类(附带实例)

Object 是 Java 所有类的祖先,所有类都直接或者间接继承该类。

Java 程序中,如果在类的声明中未使用 extends 关键字指明其父类,则默认父类为 java.lang.Object 类。

举个简单的例子:
pulic class Person{
    ...
}
等价于:
public class Person extends Object{
    ...
}

Object 类中声明了一个无参的构造方法。Object 类中的功能(属性、方法)具有通用性。Object 没有属性,方法如下表所示:

表:Object 常用方法列表
方法 功能描述
public Boolean equals(Object obj) 比较两个变量指向的是否是同一对象,是则返回true
public final Class getClass() 获取当前对象所属类的信息,返回Class对象
public String toString() 将调用该方法的对象转换成字符串
protected Object clone() 生成当前对象的一个副本并返回
public int hashCode() 返回该对象的散列码值
public final void notify() 唤醒在此对象监视器上等待的单个线程
pPublic final void notifyAll() 唤醒在此对象监视器上等待的所有线程
public final void wait() 导致当前线程等待
protected void finalize() 当垃圾回收器确定不存在该对象的更多引用时,由对象的垃圾回收器调用该方法

Object可以接收任何类型作为其参数。示例代码如下:
void method(object obj){  //可以接收任何类型作为实参
    ...
}
Person p = new Person();
method(p);

Java Object类主要方法

1) equals()方法

equals() 方法是 Object 类中的一个方法,而非运算符,所以只要声明了一个类就可以调用 equals()。但只能适用于引用数据类型。

Object 类中 equals() 的定义如下:
public boolean equals(Object obj) {
    return (this == obj);
}
可以看出 Object 类中定义的 equals() 和 == 的作用是相同的,比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体。

通常情况下,我们自定义的类如果使用 equals() 的话,主要是比较两个对象的"实体内容"是否相同。那么,我们就需要对 Object 类中的 equals() 进行重写。重写的原则:比较两个对象的实体内容是否相同。

【实例】重写 equals() 方法,判断两个对象的内容是否相等。
public class User {
    String name;
    int age;
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public boolean equals(Object obj) {
        if (obj == this) {
            return true;
        }
        if (obj instanceof User) {
            User u = (User) obj;
            return this.age == u.age && this.name.equals(u.name);
        }
        return false;
    }

    public static void main(String[] args) {
        User u1 = new User("zhangsan", 20);
        User u2 = new User("lisi", 21);
        User u3 = new User("zhangsan", 20);
        System.out.println("u1 和 u2 内容相同 ?" + u1.equals(u2));
        System.out.println("u1 和 u3 内容相同 ?" + u1.equals(u3));
    }
}
程序执行结果为:

u1 和 u2 内容相同 ?false
u1 和 u3 内容相同 ?true

2) toString()方法

toString() 方法返回对象的描述信息,即对象的类名和对象地址引用。

【实例】toString 方法的使用。
public class ToStringDemo {
    public static void main(String[] args) {
        Person p = new Person();
        String s = "java";
        System.out.println(p);
        System.out.println(p.toString());
        System.out.println(s);
        System.out.println(s.toString());
    }
}

class Person {
}
程序执行结果为:

Person@6ff3c5b5
Person@6ff3c5b5
java
java

根据运行结果发现,直接输出对象和调用 toString() 方法后再输出对象是一样的功能。也就是说,在输出一个对象时不管是否调用 toString(),最后都是调用 toString() 将对象信息转换为 String 进行输出。

Object 类的 toString() 默认返回对象的编码,但是 String 类覆写了 toString() 方法,所以输出的是字符串的的内容。如果想要输出自己类的内容,重写 toString() 方法即可,此处不再演示。

相关文章