深入了解Java Object类的使用

 更新时间:2022-07-13 17:12:17   作者:佚名   我要评论(0)

目录1.equals方法==运算符equals2.hashCode3.toString4.finalize1.equals方法
==运算符
比较运算符,即可以判断基本类型又可以判断引用类型

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

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

相关文章

  • 深入了解Java Object类的使用

    深入了解Java Object类的使用

    目录1.equals方法==运算符equals2.hashCode3.toString4.finalize1.equals方法 ==运算符 比较运算符,即可以判断基本类型又可以判断引用类型
    2022-07-13
  • 解决阿里云ECS服务器下安装MySQL无法远程连接的问题

    解决阿里云ECS服务器下安装MySQL无法远程连接的问题

    场景重现 在阿里云ECS下,Ubuntu系统上通过以下命令安装的MySQL数据库,本地连接正常, 但远程死活连接不上。 # 安装MySQL apt-get install m
    2022-07-13
  • js实现音乐播放器

    js实现音乐播放器

    本文实例为大家分享了js实现音乐播放器的具体代码,供大家参考,具体内容如下 音乐播放的主要js代码 音乐数据的数组对象 想向前端网页提供数
    2022-07-13
  • JavaScript二叉树及各种遍历算法详情

    JavaScript二叉树及各种遍历算法详情

    目录什么是二叉树满二叉树完全二叉树二叉树的存储数组存储链表存储与二叉树相关的算法深度优先遍历广度优先遍历先序遍历中序遍历后序遍历前言
    2022-07-13
  • 万字详解JavaScript手写一个Promise

    万字详解JavaScript手写一个Promise

    目录前言Promise核心原理实现Promise的使用分析MyPromise的实现在Promise中加入异步操作实现then方法的多次调用实现then的链式调用then方法链
    2022-07-13
  • JavaScript设计模式发布订阅模式

    JavaScript设计模式发布订阅模式

    目录前言发布订阅设计模式前言 发布订阅设计模式是和观察者设计模式基本上相同,但是他们两个设计模式不同的是发布订阅者拥有一个事件处理中
    2022-07-13
  • Vue中通过minio上传文件的详细步骤

    Vue中通过minio上传文件的详细步骤

    目录1、minio的安装2、minio.js文件2.1连接minio2.2通过stream流上传2.3通过带预签名的url上传(最好是minio设置了链接永久访问)2.4删除对象
    2022-07-13
  • vue?parseHTML?函数源码解析

    vue?parseHTML?函数源码解析

    目录正文函数开头定义的一些常量和变量while 循环textEnd ===0parseStartTag 函数解析开始标签总结:正文 接上篇: Vue编译器源码分析AST 抽
    2022-07-13
  • Java的IO流实现文件和文件夹的复制

    Java的IO流实现文件和文件夹的复制

    本文实例为大家分享了Java的IO流实现文件和文件夹复制的具体代码,供大家参考,具体内容如下 1、使用文件流对单个文件进行复制 将某个文件复
    2022-07-13
  • Redis数据结构SortedSet的底层原理解析

    Redis数据结构SortedSet的底层原理解析

    目录概述一些常用命令实现跳跃表跳表的插入压缩列表概述 一些常用命令 存储:zadd key score value获取:zrange key start end获取:同时获取
    2022-07-13

最新评论