欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

深入了解JavaObject类的使用,

来源: javaer 分享于  点击 36354 次 点评:36

深入了解JavaObject类的使用,


目录
  • 1.equals方法
    • ==运算符
    • equals
  • 2.hashCode
    • 3.toString
      • 4.finalize

        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类的使用的文章就介绍到这了,更多相关Java Object类内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

        您可能感兴趣的文章:
        • 深入Java万物之母Object类详情
        • Java深入探究Object类的方法
        • Java深入讲解Object类常用方法的使用
        • Java的Object类九个方法技巧
        • Java中Object类常用的12个方法(小结)
        • Java基础之Object类详解
        • java之Object类用法实例
        相关栏目:

        用户点评