亲宝软件园·资讯

展开

Java Object类

世界尽头与你 人气:0

1.equals方法

==运算符

比较运算符,即可以判断基本类型又可以判断引用类型

如果判断基本类型,则判断值是否相等

如果判断引用类型,则判断地址是否相等,即判断是否为同一个对象

equals

是object类的一个方法,只能判断引用类型

object - equals源码:

public boolean equals(Object obj) {
    return (this == obj);
}

可以清晰的看到,object类里的equals方法是判断对象的地址是否相同(是不是同一个对象)

但是,其他数据类型类会重写equals方法,比如String类的重写:(判断两个字符串的值是否相等)

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    return (anObject instanceof String aString)
            && (!COMPACT_STRINGS || this.coder == aString.coder)
            && StringLatin1.equals(value, aString.value);
}

实例:

String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1 == str2); // false
System.out.println(str1.equals(str2)); // true

2.hashCode

提高具有哈希结构的容器的效率

两个引用如果指向同一个对象,哈希值肯定(不冲突的情况下)一样,反之不一样

哈希值根据地址而来但并非地址

演示:

// hashCode
A a = new A();
A a1 = new A();
A a2 = a;
System.out.println(a.hashCode());
System.out.println(a1.hashCode());
System.out.println(a2.hashCode());
------------------------------

输出:

1324119927
990368553
1324119927

3.toString

返回该对象的字符串表示

源码:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

实例:

// toString
A a3 = new A("dahe",25,"安全服务工程师");
System.out.println(a3.toString());

输出:

classes.A@41629346
包名.类名@十六进制的hashCode

现在我们在类中重写一下toString方法(模板):

@Override
public String toString() {
    return "A{" +
            "name='" + name + '\'' +
            ", age=" + age +
            ", job='" + job + '\'' +
            '}';
}

再次运行上面的代码,现在输出如下:

A{name='dahe', age=25, job='安全服务工程师'}

另外,当我们直接输出对象时,会默认直接调用toString方法:

System.out.println(a3);

输出:

A{name='dahe', age=25, job='安全服务工程师'}

4.finalize

当对象被回收时,系统自动调用该对象的finalize方法,子类可以重写该方法,做一些释放资源的操作

注意:在JDK18中。finalize被弃用了。它虽然可以帮助我们主动释放系统底层资源,但是说实话,没用过,Java 是自动管理内存的,使用它反而会导致潜在的系统安全风险,没帮助不说反而是负担,所以计划移除了。

实例:

// finalize
A a4 = new A("dh",33,"架构师");
a4 = null; // 这是a4成为了垃圾,垃圾回收器就会回收对象
// 在销毁对象之前,会调用对象的finalize方法
// 程序员就可以在这个方法中写入自己的业务,释放资源

重写finalize方法:

@Override
protected void finalize() throws Throwable {
    System.out.println("我们销毁对象");
}

除此之外,还可以主动运行垃圾回收器:

System.gc(); // 主动调用垃圾回收器

加载全部内容

相关教程
猜你喜欢
用户评论