当前位置: 首页 > news >正文

JAVASE(十二)常用类(一)Object类

目录

一、API

二、Object类

1.toString()方法

2.equals方法


一、API

API文档是一个说明文档,记载了java官方预先定义的类和接口的功能,以及函数的功能。目的是给开发人员提供使用帮助说明。

二、Object类

Object类属于根基类,当一个类没有指明继承的父类时,会默认该类继承Object类。

1.toString()方法

Object中该方法用于返回当前对象的有关信息。当一个类中没有重写该方法的时候,就会自动调用Object类中的该方法。

其中 getClass().getName()指的是返回当前类名(即包名+类名),Integer.toHexString(hashCode())中hashCode()是拿到当前对象在内存空间中的哈希值(为10进制),Integer.toHexString()是指调用Integer类的toHexString方法,可以将拿到的哈希值转为16进制。

根据需要可以在用户自定义的类型中重写该方法。

如:定义一个Human,然后创建并输出该类对象。

结果如下:

此时就调用的是Object类中的toString方法。

如果在Human类中对该方法重写,返回名字,即:

再次运行主方法,结果如下:

2.equals方法

在前面运算符中==用来比较两个值是否相等。之前在对象引用中有提到过,事实上引用类型的变量的值的是该类型对象的地址,所以用==就比较的是对象的地址。

比如:

因为两个变量对应两个对象,每次创建对象就会分配一个内存地址,对象的地址也就是变量的值并不相等;所以使用==时,结果为false。  

但有时候,我们想去比较的是对象的内容。这时候就可以用equals方法:

注意此时输出里写的并不是h1.equals(h2)。原因是我们目前在Human类中没有重写equals方法,这样就会调用Object类中的equals方法;而Human类中的name属性是String类,在String类中已经重写了该方法。所以图片里调用的是String类中的equals方法。这样输出结果就是true。

Object类中的equals方法如下,实际就是直接比较两个对象的地址。和==效果一样: 

 而String类中进行如下重写,即先判断是否为同一个对象,如果是就直接返回true:否则判断方法传进来的参数是否属于String类,如果是就向下转型,随后根据两个字符串的长度和每个位置对应的字符进行比较,如果相等就返回true,有一个不符合就返回false。

而对于两个String类型的变量,如果都直接进行赋值,那么也可以用==比较,如下:

输出结果为true,这是因为String类型的字符串驻留的特性,即java会在字符串常量池中存储唯一实例, 当多次使用相同字面量时,会直接引用池中的同一对象,避免重复创建新对象,节省内存。

注意和以下写法区分。当用构造方法时,就会绕过字符串常量池,强制创建新对象:

此时输出中比较的就是两个对象的地址,结果就为false。 


http://www.mrgr.cn/news/96613.html

相关文章:

  • HTML实现图片上添加水印的工具
  • 使用大语言模型进行Python图表可视化
  • 高级java每日一道面试题-2025年3月20日-虚拟化操作系统篇[Docker篇]-如何控制docker容器的启动顺序?
  • 网络攻防快速入门笔记pwn|01 Pwn栈溢出基础
  • 戴尔电脑安装Ubuntu双系统
  • Adobe Lightroom 2025安装下载和激活指南
  • leetcode 169.Majority Element
  • Vue3中的Icon处理方案(包括将svg转化为Icon)
  • 一个极简的词法分析器实现
  • Java-01-源码篇-JUC并发编程-原子类
  • 供应链业务-供应链全局观(一)
  • 数据库--数据库设计
  • OpenHarmony v4.1 Release设置应用随系统自动启动
  • 23 python 数据容器推导式
  • 【学Rust写CAD】21 2D 点(point.rs)
  • Verilog HDL 100道面试题及参考答案
  • [7-02-02].第03节:生产经验 - Broker节点服役和退役
  • Nyquist插件基础:打印格式化字符串(LISP语言)
  • python代码实现离散haar小波变换和db4小波变换
  • kubernetes》》k8s》》 kubeadm、kubectl、kubelet 重启pod