java中Object类4种方法详细介绍

目录
  • Object(四大方法):
    • hashCode()方法:
    • equals()方法:
    • getClass()方法:
    • toString()方法:
  • 总结

Object(四大方法):

文章干货满满,耐性看完~~
何为Object?
首先先来看看官方对Object的介绍:
在这里附上Java官方的查阅工具:https://docs.oracle.com/en/java/javase/17/docs/api/index.html

由官方介绍可见,object属于Java.lang包内的一个类,而且提供了很多种方法, Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。简单的说Object类就是所有类的父类,包括我们所写的类,我们在使用类的时候就会利用Object类中的方法,之所以我们在日常学习和开发中见不到object这个类,是因为所有的父类都自动的继承了这个类,并且拥有object类的所有方法,并且可以对这些方法进行重写,达到我们的业务需求。

hashCode()方法:

hashCode()介绍:
hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整 数。这个哈希码的作用是
确定该对象在哈希表中的索引位置。

用法:

//新建一个HashTest类
public class HashTest {
}

//测试类
public class TestMain {
    public static void main(String[] args) {
        HashTest h = new HashTest();      

        int hash = h.hashCode();   //调用hashCode()方法
        System.out.println(hash);  //输出可以得到一串整数
    }
}
//460141958
//这个数也就是哈希码,也称为散列码,
//作用是确定该对象在哈希表中的索引位置

equals()方法:

参考官方文档可知:equals(Object obj),需要传入一个对象
所以这个方法的作用就是判断其他对象是否“等于”此对象,返回值也就是布尔类型。
上代码:

public class HashTest {
}  //还是使用那个类

public class TestMain {
    public static void main(String[] args) {
        HashTest h1 = new HashTest();
        HashTest h2 = new HashTest();  //用一个类去创建两个对象,判断是否相等

        System.out.println(h1.equals(h2));  //语法:h1.equals(h2)
    }
}

//结果:false
到这里,很多人就会有疑问了,同样的一个类去创建两个对象,为什么会不一样呢?
OK,首先我们看一下equals的源码,看看它的判断原理是什么:
//equals源码
   public boolean equals(Object obj) {
        return (this == obj);
    }
源码很简单,不就是两个==号,但是我们知道类的引用类型的数据,而用两个等于号去判断两个引用类型,是去判断两者的内存地址是否相同,当一个类去new一个新对象时,是在堆内存内开辟了一个新的空间,当去创建两个或者多个类的时候,每个类肯定有属于自己的空间,所有也有一个独一无二的地址,这就是为什么这个判断为什么不成立的原因。
但是比较对象的引用对于我们在实际开发中没有意义,我们一般还是要重写该方法,比如去判断两者的参数是否相等:
public class HashTest {

    private int age;

    public HashTest() {
    }

    public HashTest(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

//重写equals方法,只要HashTest生成的对象,传入age参数相等,即可判断两者一致
//重写后的equals,就不在是去判断两者的地址是否相同
    @Override
    public boolean equals(Object obj){
        HashTest h = (HashTest) obj;    //多态
        if(this.age == h.getAge()) {
            return true;
        }
        return false;
    }
}

//测试类:
public class TestMain {
    public static void main(String[] args) {
        HashTest h1 = new HashTest(5);
        HashTest h2 = new HashTest(5);

        System.out.println(h1.equals(h2));
    }
}

//结果:true

//若吧其中一个age改成6:
public class TestMain {
    public static void main(String[] args) {
        HashTest h1 = new HashTest(5);
        HashTest h2 = new HashTest(6);

        System.out.println(h1.equals(h2));
    }
}
//结果:flase

== 和 equals 的区别是什么?

== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同 一个对象。
(基本数据类型== 比较的是值,引用数据类型 == 比较的是内存地址)

equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
情况1:类没有重写equals() 方法。则通过 equals() 比较该类的两个对象时, 等价于通过“==”比较这两个对象。
情况2:类重写了 equals() 方法。一般,我们都覆盖 equals() 方法来两个对象 的内容相等;若它们的内
容相等,则返回 true (即,认为这两个对象相等)

hashCode()与equals()的相关规定:

如果两个对象相等,则hashcode一定也是相同的 两个对象相等,对两个对象分别调用equals方法都返
回true, 两个对象有相同的hashcode值,它们也不一定是相等的。因此,equals 方法被重写过,则 hashCode 方法也必须被重写,hashCode() 的默认行为是对堆上的对象产生独特值。如果没有重写hashCode(),则该 class 的两个对象无论如何都不会相等(即使这两个对象指 向相同的数据)

getClass()方法:

返回此 Object 运行时的类,,获取对象的真实类的全名称
比如在使用多态时,父类引用变量,使用getClass()方法就可以看到真实的类:

public class HashTest {
}

//测试类
public class TestMain {
    public static void main(String[] args) {
        HashTest h1 = new HashTest();

        System.out.println(h1.getClass());  //调用getClass()
    }
}

输出值:class HashTest
这个就比较好理解,简单的说就是看当时使用该方法的对象,到底是哪个类。
还有一个应用场景,在使用多态的时候,在代码多的时候我们做不到用肉眼去找这个多态是用哪子类,即使找得到,也很浪费时间,那么getClass()方法就派上用场了:
//在polymorphismTest包下创建了Person类,作为父类
package polymorphismTest;
public class Person {
    public void eat(){
        System.out.println("我会吃饭");
    }
}

//创建Student类,继承Person
package polymorphismTest;
public class Student extends Person{

    @Override    //重写父类eat方法
    public void eat(){
        System.out.println("我是学生,我也还吃饭");
    }
}

//测试类
package polymorphismTest;
public class TestMain {
    public static void main(String[] args) {

        Person p = new Student();    //使用多态
        p.eat();                     //这里其实就是使用了Student子类的方法
        System.out.println(p.getClass());  //查看p到底是什么类
    }
}

//输出结果:
//我是学生,我也还吃饭
//class polymorphismTest.Student
用父类去引用子类的方法时,可以执行子类的方法,当用getClass()方法去查看,结果也是Student子类
不使用多态,使用类本身去创建对象时:
package polymorphismTest;

public class TestMain {
    public static void main(String[] args) {

        Person p = new Person();  //当这里不使用多态,而是使用本身的时候
        p.eat();
        System.out.println(p.getClass());
    }
}

//我会吃饭
//class polymorphismTest.Person
//这里返回的就是Person类了

toString()方法:

返回一个字符串来标识当前对象
对于这个方法,我们先来看看toString()源码:

 public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
其实也很简,就是 类名+符号@+对象的哈希码值
public class TestMain {
    public static void main(String[] args) {

        Person p = new Person();
        System.out.println(p.toString());
    }
}
//结果:polymorphismTest.Person@1b6d3586
但是这个返回值视乎没什么意义,所以,为了返回值有更多的意义,我们可以重写这个方法

总结

到此这篇关于java中Object类4种方法详细介绍的文章就介绍到这了,更多相关java Object类内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 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类吗

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

  • 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.getClass()方法解析

    目录 Java Object.getClass()方法 具体见下面的例子 Java Object.getClass()源码分析 1.栈 2.堆 3.老生代 Person类型元数据 反射机制 Java Object.getClass()方法 Object.getClass()方法,这个方法的返回值是Class类型,Class c = obj.getClass(); 通过对象c,我们可以获取该对象的所有成员方法,每个成员方法都是一个Method对象:我们也可以获取该对象的所有成员变量,每个成员变量都

  • java中Object类4种方法详细介绍

    目录 Object(四大方法): hashCode()方法: equals()方法: getClass()方法: toString()方法: 总结 Object(四大方法): 文章干货满满,耐性看完~~何为Object?首先先来看看官方对Object的介绍:在这里附上Java官方的查阅工具:https://docs.oracle.com/en/java/javase/17/docs/api/index.html 由官方介绍可见,object属于Java.lang包内的一个类,而且提供了很多种方法

  • 详谈Java中Object类中的方法以及finalize函数作用

    Object是所有类的父类,任何类都默认继承Object. 一.Object类中的方法 1.clone方法 保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常. 主要是JAVA里除了8种基本类型传参数是值传递,其他的类对象传参数都是引用传递,我们有时候不希望在方法里讲参数改变,这是就需要在类中复写clone方法. 2.getClass方法 final方法,获得运行时类型. 3.toString方法 该方法

  • Java的Object类九个方法技巧

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

  • 详解Java中Optional类的使用方法

    目录 一.Optional类的来源 二.Optional类是什么 三.Optional类用法 四.代码示例 1.创建Optional类 2.判断Optional容器中是否包含对象 3.获取Optional容器的对象 4.过滤 5.映射 五.什么场景用Optional 1.场景一 2.场景二 3.场景三 4.场景四 一.Optional类的来源 到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因.以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optiona

  • Java中Optional类及orElse方法详解

    目录 引言 Java 中的 Optional 类 ofNullable() 方法 orElse() 方法 案例 orElseGet() 方法 案例 orElse() 与 orElseGet() 之间的区别 引言 为了让我更快的熟悉代码,前段时间组长交代了一个小任务,大致就是让我整理一下某个模块中涉及的 sql,也是方便我有目的的看代码,也是以后方便他们查问题(因为这个模块,涉及的判断很多,所以之前如果 sql 出错了,查问题比较繁琐). 昨天算是基本完成了,然后今天组长就让给我看一个该模块的缺陷

  • 一文带你搞懂Java中Object类和抽象类

    目录 一.抽象类是什么 二.初始抽象类 2.1 基本语法 2.2 继承抽象类 三.抽象类总结 四.Object类 4.1 初始Object 4.2 toString 4.3 equals 4.4 hashcode 一.抽象类是什么 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用.也是因为这个原因,通常在设计阶段决定要

  • java中object类实例分析

    问:什么是Object类? 答:Object类存储在java.lang包中,是所有java类(Object类除外)的终极父类.当然,数组也继承了Object类.然而,接口是不继承Object类的,Object类不作为接口的父类. 下面,我们就通过实例,对object进行分析 public class ObjectStu { /*Object类:java里所有类的父类,顶层的类 *equals:判断两个对象是否"相等"; *hashcode:返回一个对象的哈希码值,是一个整数 *因为之后

  • 详解Java中Duration类的使用方法

    目录 简介 Duration和Period 创建方法 通过时间单位创建 通过LocalDateTime或LocalTime 通过已有的Duration 解析方法 用法说明 详解 比较方法 增减方法 转换单位 取值方法 简介 本文用示例介绍java的Duration的用法. Duration和Period 说明 Duration类通过秒和纳秒相结合来描述一个时间量,最高精度是纳秒.时间量可以为正也可以为负,比如1天(86400秒0纳秒).-1天(-86400秒0纳秒).1年(31556952秒0纳

  • 详解Java中Period类的使用方法

    目录 简介 Duration和Period 创建方法 通过时间单位创建 通过LocalDate创建 解析方法 比较方法 增减方法 转换单位 取值方法 简介 本文用示例介绍java的Period的用法. Duration和Period 说明 Duration类通过秒和纳秒相结合来描述一个时间量,最高精度是纳秒.时间量可以为正也可以为负,比如1天(86400秒0纳秒).-1天(-86400秒0纳秒).1年(31556952秒0纳秒).1毫秒(0秒1000000纳秒)等. Period类通过年.月.日

随机推荐