iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java中Object类4种方法详细介绍
  • 436
分享到

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

2024-04-02 19:04:59 436人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录Object(四大方法):hashCode()方法:equals()方法:getClass()方法:toString()方法:总结Object(四大方法): 文章干货满满,耐性看

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

--结束END--

本文标题: java中Object类4种方法详细介绍

本文链接: https://www.lsjlt.com/news/162226.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java中Object类4种方法详细介绍
    目录Object(四大方法):hashCode()方法:equals()方法:getClass()方法:toString()方法:总结Object(四大方法): 文章干货满满,耐性看...
    99+
    2022-11-12
  • MongoDB中4种日志的详细介绍
    前言 任何一种数据库都有各种各样的日志,MongoDB也不例外。MongoDB中有4种日志,分别是系统日志、Journal日志、oplog主从日志、慢查询日志等。这些日志记录着MongoDB数据库不同方面的...
    99+
    2022-10-18
  • Java 方法(详细介绍)
    那么什么是方法呢?Java方法是语句的集合,它们在一起执行一个功能。 (推荐学习:java课程)方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点 使程序变得更...
    99+
    2017-06-19
    java教程 Java
  • Java中的各种锁详细介绍
    这篇文章主要讲解了“Java中的各种锁详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中的各种锁详细介绍”吧!锁有什么作用呢说了这么多还是不清楚锁到底有什么用处这一点就要深思我...
    99+
    2023-06-16
  • 详细介绍Java中的各种锁
    一、一张图了解21种锁 二、乐观锁 应用 CAS 思想 一种乐观思想,假定当前环境是读多写少,遇到并发写的概率比较低,读数据时认为别的线程不会正在进行修改 实现 写数据...
    99+
    2022-11-12
  • 详细介绍java中的byte类型
    Java也提供了一个byte数据类型,并且是基本类型。java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127,也就是signed byte。下面这篇文章主要给大家介绍了关于java中byte类型的相关资料,需要的朋...
    99+
    2020-01-07
    java入门 java byte类型
  • 在 Java 中反转数组的4种详细方法
    1.问题 Input : 1, 2, 3, 4, 5 Output :5, 4, 3, 2, 1 Input : 10, 20, 30, 40 Output : 40, 30, 20, 10...
    99+
    2023-10-07
    数据结构 算法
  • java中关于scanner类的详细介绍
    1.Scanner的实现步骤第一步:在有效代码的第一行,通过import导入Scanner类!import java.util.Scanner;第二步:通过new关键字实例化一个Scanner对象!Scanner input = new S...
    99+
    2019-01-24
    java入门 java scanner
  • 详细介绍在pandas中创建category类型数据的几种方法
    在pandas中创建category类型数据的几种方法之详细攻略  T1、直接创建 category类型数据 可知,在category类型数据中,每一个元素的值要么是预设...
    99+
    2022-11-12
  • Android 杀死进程几种方法详细介绍
    Android 杀死进程:              对...
    99+
    2022-06-06
    进程 方法 Android
  • Java中包装类和Arrays类的详细介绍
    目录包装类为什么需要包装类自动装箱:自动拆箱:包装类的特有功能:小结:Arrays类Arrays类的概述Arrays类的常用APIsort方法自定义规则:总结包装类 包装类其实就是8...
    99+
    2022-12-14
    java的Arrays类 Java包装类 java的array类
  • Java 列表转换为数组的3种详细方法介绍
    1.介绍 List 接口提供了一种存储有序集合的方法。它是 Collection 的子接口。它是一个有序的对象集合,其中可以存储重复值。由于 List 保留了插入顺序,因此它允许元素的位置访问和插入。...
    99+
    2023-09-22
    java jvm 开发语言
  • 关于在Java中反转数组的4种详细方法
    目录1.问题2.方法方法1:使用临时数组方法2:使用交换方法3:使用 Collections.reverse() 方法方法4:使用 StringBuilder.append...
    99+
    2023-05-18
    Java反转 Java数组 反转数组
  • 关于java中类和对象的详细介绍
    类和对象对象我们知道,代表现实世界中可以明确标识的一个实体(万物皆对象),每个对象都有自己独特的标识、状态和行为。类是具有相似特征和行为的事物的统称。使用一个通用类来定义同一类型的对象。 类是一个模板 、蓝本或者说是合约 , 用来定义对象的...
    99+
    2015-06-07
    java入门 java 对象
  • Java语言中4种内部类的超详细讲解
    目录一.内部类的介绍二.内部类的种类2.1实例内部类      2.2.静态内部类2.3局部内部类2.4匿名内部类总结 一.内部类的...
    99+
    2023-05-17
    java内部类详解 内部类java正确使用 java内部类有哪些
  • 帝国CMS整合Discuz的多种方法详细介绍
    帝国cms整合Discuz有两种方式: 方式一、用Ucenter接口整合。使用Ucenter接口整合无需安装通行证跟万能会员接口。 方式二、用Discuz通行证接口整合。需先安装万能会员接口,然后再安装通行证。 Uce...
    99+
    2022-06-12
    Discuz整合 帝国cms
  • Android Service中方法使用详细介绍
     service作为四大组件值得我们的更多的关注 在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务。例如,一个从s...
    99+
    2022-06-06
    android service service 方法 Android
  • 详细介绍golang中.()的使用方法
    Golang是一门非常流行的编程语言,在很多领域都有着广泛的应用。在开发过程中,很多时候我们需要将函数作为参数传递给其他函数,这时候就需要用到golang中的.()用法。本文将详细介绍golang中.()的使用方法。什么是.()用法?在go...
    99+
    2023-05-14
  • 关于java中的常用类——String的详细介绍
    概述java.lang.String 类代表字符串。Java程序中所有的字符串文字(例如"abc")都可以被看作是实现此类的实例String 中包括用于检查各个字符串的方法,比如用于比较字符串,搜索字符串,提取子字符串以及创建具有翻译为大写...
    99+
    2014-10-10
    java基础 java 常用类 String
  • 详细介绍PHP时间转时间戳的几种方法
    PHP时间转时间戳是一项常用的操作,它可以将指定的时间转化为以秒为单位的时间戳。在PHP项目中,时间戳是一个非常重要的概念,它可以用于处理与时间相关的操作,如记录日志、统计时长等。在本文中,我们将介绍PHP时间转时间戳的几种方法。一、使用d...
    99+
    2023-05-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作