深入了解Java Object类的使用

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

(0)

相关推荐

  • 深入Java万物之母Object类详情

    目录 前言 一.接口补充知识 二.Object类 1.重点一 2.重点二 3.重点三 4.重点四 总结 前言 在Java中,有一个很神奇的类,所有的类见了它都得恭敬的叫一声“父亲”,因为它就是Java中的万物之父,Object类,它是所有类的默认父类 ,子类不用使用extends关键字继承它,不管是JDK中的类,还是自定义的类 一.接口补充知识 1.接口和接口之间继承的,接口坚决不能继承一个类 2.如果一个类既需要继承一个类,又需要实现多个接口时先使用extends继承一个类,再使用implem

  • java之Object类用法实例

    本文实例讲述了java中Object类用法.分享给大家供大家参考.具体如下: 1.Object类是所有java类的基类 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类,ex: public class Person{ ~~~~~ } 等价于 public class Person extends Object{ ~~~~~ } 2.Object类之equals方法 ①.Object类中定义有: public boolean equals(Object obj)方

  • Java的Object类九个方法技巧

    目录 一.getClass() 二.finalize() 三.toString() 四.equals()和hashcode() 五.wait().notify()和notifyAll() 六.clone() 前言: Java的Object 类的完整路径是java.lang.Object ,是所有类的父类编译,当我们创建一个类时,如果没有明确继承一个父类,那么它就会自动继承 Object,成为 Object 的子类(隐式继承).Object类有九大常用方法,分别是getClass().finali

  • Java基础之Object类详解

    object类的介绍 object是所有类的直接父类或者是间接父类,为什么这么说呢? 可以查询java8的API帮助文档: 可见在这样的一个类树中,所有的类的根还是Object类 在IDEA中新建一个类,系统会默认继承Object类 public class Pet extends Object{ } 那么Dog继承了Pet类的属性和行为方法,还会继承Object类的属性和行为方法了吗?这一点是肯定的,Pet类作为Object类的子类,Dog类作为Pet类的子类,所以说Object是Dog类的间

  • Java深入讲解Object类常用方法的使用

    目录 1.Object类的常用方法 2.equals()方法 3.toString方法 4.getClass方法 5.对象运算符instanceof 实例Java代码 java继承 1.Object类的常用方法 方法 功能 public Boolean equals(Object obj) 判断两个对象变量所指向的是否为同一个对象 public String toString() 将调用该方法的对象转换为字符串返回 public final Class getClass 返回运行该方法的对象所属

  • Java中Object类常用的12个方法(小结)

    目录 前言 1. getClass 方法 2. hashCode 方法 3. equals 方法 4. clone 方法 5. toString 方法 6. notify 方法 7. notifyAll 方法 8. wait(long timeout) 方法 9. wait(long timeout, int nanos) 方法 10. wait 方法 11. finalize 方法 前言 Java 中的 Object 方法在面试中是一个非常高频的点,毕竟 Object 是所有类的"老祖宗&qu

  • Java深入探究Object类的方法

    目录 1.equals方法 1.API中equals方法的介绍 2.==和equals 的对比 2.hashCode方法 3.toString方法 4.finalize方法 本文主要带大家看看Object类中一些常用方法的API文档的介绍和JDK中的源码. 1.equals方法 1.API中equals方法的介绍 2.==和equals 的对比 == 既可以判断基本类型,又可以判断引用类型,如果判断的是基本类型,判断的是值是否相等,如果判断的是引用类型,则判断的是地址是否相等,即判断是不是同一个

  • Java Object类和包装类深入解读

    目录 查看源代码方法 Object类 定义及应用 1. toString() 2. equals( ) 包装类 定义及应用 装箱和拆箱 自己实现包装类 通过包装类让Object类接收基本数据类型 包装类的对象比较 包装类和String的相互转换 查看源代码方法 在IDEA中双击 shift 键,可以搜索相关类名,查看源代码 点击Structure ,左侧用橙色床框住的部分是类的结构,结构包含所有的方法.属性.内部类的声明.结构中带绿色小锁的图标表示 public 权限,钥匙图标就是继承权限(pr

  • Java Object类equals方法

    基本概念: Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入: Object类是所有Java类的祖先.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法.可以使用类型为Object的变量指向任意类型的对象 equals()方法:比较两个对象是否同一       如果两个对象具有相同的类型以及相同的属性值,则称这两个对象相等.如果两个引用对象指的是同一个对像,则称这两个变量同一.Object类中定义的equa

  • 深入了解Java Object类的使用

    目录 1.equals方法 ==运算符 equals 2.hashCode 3.toString 4.finalize 1.equals方法 ==运算符 比较运算符,即可以判断基本类型又可以判断引用类型 如果判断基本类型,则判断值是否相等 如果判断引用类型,则判断地址是否相等,即判断是否为同一个对象 equals 是object类的一个方法,只能判断引用类型 object - equals源码: public boolean equals(Object obj) { return (this =

  • Java Object类详解_动力节点Java学院整理

    Java作为一个庞大的知识体系,涉及到的知识点繁多,本文将从Java中最基本的类java.lang.Object开始谈起. Object类是Java中其他所有类的祖先类,没有Object类Java面向对象无从谈起.作为其他所有类的基类,Object具有哪些属性和行为,是Java语言设计背后的思维体现. Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入.Object类没有定义属性,一共有13个方法,具体的类定义结构如下图: 1.类构造

  • Java object类及正则表达式原理解析

    equals方法 equals方法,用于比较两个对象是否相同 /* 描述人这个类,并定义功能根据年龄判断是否是同龄人 由于要根据指定类的属性进行比较,这时只要覆盖Object中的equals方法 在方法体中根据类的属性值进行比较 */ class Person extends Object{ int age ; //复写父类的equals方法,实现自己的比较方式 public boolean equals(Object obj) { //判断当前调用equals方法的对象和传递进来的对象是否是同

  • Java 语言中Object 类和System 类详解

    Object是java所有类的基类,是整个类继承结构的顶端,也是最抽象的一个类.大家天天都在使用toString().equals().hashCode().waite().notify().getClass()等方法,或许都没有意识到是Object的方法,也没有去看Object还有哪些方法以及思考为什么这些方法要放到Object中. 一.Java Object类简介-所有类的超类 Object 是 Java 类库中的一个特殊类,也是所有类的父类.也就是说,J ava 允许把任何类型的对象赋给

  • 了解java中对象基础Object类

    目录 一.Object简述 1.显式扩展 2.引用与对象 二.基础方法 1.getClass 2.toString 3.equals与hashCode 4.thread相关 5.clone 6.finalize 三.生命周期 1.作用域 2.垃圾回收机制 四.源代码地址 一.Object简述 源码注释:Object类是所有类层级关系的Root节点,作为所有类的超类,包括数组也实现了该类的方法,注意这里说的很明确,指类层面. 所以在Java中有一句常说的话,一切皆对象,这话并不离谱. 1.显式扩展

  • 你了解Java中的Object类吗

    任何一个类默认继承Object类,就算没有直接继承,最终也会间接继承. Object类,有两种方式找到: 第一种:在源码当中找到 第二种:查阅java类库的帮助文档 Object类中两个重要的方法: boolean equals (Object obj) //判断两个对象是否相等 String toString () //将对象转换成字符串形式 equals方法: 源代码: public boolean equals(Object obj) { return (this == obj); } 作

随机推荐