object的一些内置函数

toString方法

Object类中定义了toString()方法,返回对象的字符串表示。默认返回的是类名@哈希码的十六进制形式。

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}Code language: JavaScript (javascript)

当使用System.out.println(对象)时,会自动调用该对象的toString()方法。

实际开发中通常会重写toString()方法,返回更有意义的对象信息。

class Student {
    String name;
    int age;

    @Override
    public String toString() {
        return "Student{name='" + name + "', age=" + age + "}";
    }
}Code language: JavaScript (javascript)

hashcode方法

hashCode()方法返回对象的哈希码值,是一个int类型的值。

同一个对象在程序的一次执行期间,多次调用hashCode()应当返回相同的整数,前提是对象中用于equals比较的信息没有被修改。

如果根据equals()方法两个对象相等,那么对这两个对象分别调用hashCode()应当产生相同的整数结果。

如果重写了equals()方法,通常也需要重写hashCode()方法,以保持equals相等则hashCode相等的约定。

class Student {
    String name;
    int age;

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + age;
        return result;
    }
}Code language: JavaScript (javascript)

equals方法

equals()方法用于判断两个对象是否相等。Object类中的默认实现是比较对象引用是否指向同一个内存地址。

public boolean equals(Object obj) {
    return (this == obj);
}Code language: JavaScript (javascript)

实际开发中通常需要重写equals()方法,根据对象的属性来判断逻辑上的相等性。

class Student {
    String name;
    int age;

    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        Student student = (Student) obj;
        return age == student.age && name.equals(student.name);
    }
}Code language: JavaScript (javascript)

对象转型

一个基类的引用可以指向子类对象

Father f = new Son();Code language: JavaScript (javascript)

一个基类的引用不可以访问其子类对象新增的成员,包括属性和方法。

可以使用引用变量instanceof类名来判断该类型变量所指向的对象是否属于该类或者该类的子类

Son s = new Son();
boolean b = s instanceof Father; // trueCode language: JavaScript (javascript)

子类对象可以当作基类的对象来使用称为向上转型,反之称为向下转型。

Father f = new Son(); // 向上转型,自动完成
Son s2 = (Son) f;     // 向下转型,需要强制类型转换Code language: JavaScript (javascript)

向下转型前通常需要先用instanceof判断,否则可能出现ClassCastException。

Father f = new Son();
if (f instanceof Son) {
    Son s = (Son) f;
}Code language: JavaScript (javascript)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注