首页 >Java >java教程 >Java Object类怎么使用

Java Object类怎么使用

WBOY
WBOY转载
2023-05-13 17:13:141488浏览

    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(); // 主动调用垃圾回收器

    以上是Java Object类怎么使用的详细内容。更多信息请关注PHP中文网其他相关文章!

    声明:
    本文转载于:yisu.com。如有侵权,请联系admin@php.cn删除