深入了解Java Object类的使用

 更新时间:2022年07月13日 15:44:37   作者:世界尽头与你  
java继承中说到的Object类是java中一个特殊的类,所有的类都是直接或者间接的继承自Object类。本文就和大家详细讲讲Java Object类的使用,感兴趣的可以了解一下

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类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Task定时任务的实现详解

    Spring Task定时任务的实现详解

    这篇文章主要介绍了SpringBoot定时任务功能详细解析,这次的功能开发过程中也算是对其内涵的进一步了解,以后遇到定时任务的处理也更清晰,更有效率了,对SpringBoot定时任务相关知识感兴趣的朋友一起看看吧
    2022-08-08
  • 什么是递归?用Java写一个简单的递归程序

    什么是递归?用Java写一个简单的递归程序

    这篇文章主要介绍了什么是递归?用Java写一个简单的递归程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • SpringBoot接受前台参数的6种方式以及统一响应代码示例

    SpringBoot接受前台参数的6种方式以及统一响应代码示例

    这篇文章主要给大家介绍了关于SpringBoot接受前台参数的6种方式以及统一响应的相关资料,前端负责展示页面和用户交互,而后端则负责处理业务逻辑和数据存储,在这种架构下前端需要将用户输入的数据发送给后端进行处理,需要的朋友可以参考下
    2023-12-12
  • Spring中@ConfigurationProperties的用法解析

    Spring中@ConfigurationProperties的用法解析

    这篇文章主要介绍了Spring中@ConfigurationProperties的用法解析,传统的Spring一般都是基本xml配置的,后来spring3.0新增了许多java config的注解,特别是spring boot,基本都是清一色的java config,需要的朋友可以参考下
    2023-11-11
  • Java RocksDB安装与应用

    Java RocksDB安装与应用

    本篇文章主要给大家介绍了JAVA中RocksDB的安装与应用,有需要到的朋友一起学习参考下。
    2017-12-12
  • Spring一步到位精通拦截器

    Spring一步到位精通拦截器

    拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行。本文将详细讲讲SpringMVC中拦截器的概念及入门案例,感兴趣的可以尝试一下
    2023-01-01
  • java实现的计算器功能示例【基于swing组件】

    java实现的计算器功能示例【基于swing组件】

    这篇文章主要介绍了java实现的计算器功能,结合实例形式分析了java基于swing组件实现计算器功能相关运算操作技巧,需要的朋友可以参考下
    2017-12-12
  • SpringMVC集成FastJson使用流程详解

    SpringMVC集成FastJson使用流程详解

    如果你使用 Spring MVC 来构建 Web 应用并对性能有较高的要求的话,可以使用 Fastjson 提供的FastJsonHttpMessageConverter 来替换 Spring MVC 默认的 HttpMessageConverter 以提高 @RestController @ResponseBody @RequestBody 注解的 JSON序列化速度
    2023-02-02
  • SpringBoot特点之依赖管理和自动装配(实例代码)

    SpringBoot特点之依赖管理和自动装配(实例代码)

    在使用SpringBoot的时候,会自动将Bean装配到IoC容器中,操作也很简单,今天小编给大家介绍下SpringBoot特点之依赖管理和自动装配的知识,感兴趣的朋友一起看看吧
    2022-03-03
  • 详解使用JRebel插件实现SpringBoot应用代码热加载

    详解使用JRebel插件实现SpringBoot应用代码热加载

    这篇文章主要介绍了详解使用JRebel插件实现SpringBoot应用代码热加载,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10

最新评论