Java高级重点知识点-10-Object类

文章目录

  • Object类(java.lang)

Object类(java.lang)

Object类是Java语言中的根类,即所有类的父类`
重点:

  • public String toString()`:返回该对象的字符串表示。
public class User {private String username;private String password;public User() {}public User(String username, String password) {this.username = username;this.password = password;}public static void main(String[] args) {User user = new User("admin","123456");System.out.println(user.toString());}
}

在这里插入图片描述
我们创建了一个User类对象,User类对象的用户名为admin,密码为123456,并且我们调用了对象的toString()方法。这里我们的User类中并没有定义toString()方法,也没有继承任何类和实现任何接口,这里就涉及到了Object类,该类是所有类的父类,如果一个类没有特别指定父类,那么默认则继承自Object类
通常我们会重写toString方法,来获得我们所想看到的结果,而不是只看到这个对象在堆内存中的内存地址。

public class User{private String username;private String password;public User() {}public User(String username, String password) {this.username = username;this.password = password;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}public static void main(String[] args) {User user = new User("admin","123456");System.out.println(user.toString());}
}

在这里插入图片描述

  • public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。
public class User {private String username;private String password;public User() {}public User(String username, String password) {this.username = username;this.password = password;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}public static void main(String[] args) {User user1 = new User("admin","123456");User user2 = new User("admin","123456");System.out.println(user1.equals(user2));}
}

在这里插入图片描述
通常情况下,我们都希望通过比较对象的内容来判断俩个对象是否相等,而不是比较内存地址。因此在日常开发中,我们也会重写equals方法。

import java.util.Objects;public class User {String username;String password;public User() {}public User(String username, String password) {this.username = username;this.password = password;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}@Overridepublic boolean equals(Object o){if (this == o ){return true;}if (o == null || getClass() != o.getClass()){return false;}User user = (User) o;return username == user.username && Objects.equals(username,user.username) && password == user.password && Objects.equals(password,user.password);}public static void main(String[] args) {User user1 = new User("admin","123456");User user2 = new User("admin","123456");System.out.println(user1.equals(user2));}
}

在这里插入图片描述
这里我们重写了Object类,也就是父类中的equals()方法,首先对俩个对象进行了==判断,如果俩个对象的内存地址相等,则表示相等,然后我们判断传入的对象是否为空并且俩个比较的对象要是同一个类型,最后如果以上的判断都成立,我们将传入的对象进行了向下转型(也就是多态),通过一个Objects类来帮我们进行判断值是否相等。
Objects源码:
在这里插入图片描述
这里我们可以学习一下代码的编写,可以看到在Objects源码中先判断了俩个对象的内存地址是否相等,如果相等则不用进行后面代码的判断,提高了代码的效率,还要注意的就是,第二个括号中的判断并不是直接判断a对象是否等于b对象,而是先判断a对象是否为空,这里有个很重要的原因,这也是我们初学者常遇见的一个异常(空指针异常),当我们的a对象为空的时候,a对象调用equals()方法,就会报空指针异常。因此这里先进行了判断避免了空指针异常的发生。
代码举例:
当我们判断一个字符串是否为空字符串的时候,我们有俩种写法
写法一:

public class CompareToString {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String str = sc.nextLine();System.out.println(str.equals(""));}
}

写法二:

public class CompareToString {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String str = sc.nextLine();System.out.println("".equals(str));}
}

很显然,第二种写法更优,因为当我们把一个引用类型的变量来调用equals()方法时,如果这个引用类型的变量为null,就会出现空指针异常,但是如果我们将一个空字符调用equals()方法来比较的时候,当str为空的时候并不会报空指针异常。
在这里插入图片描述
注意:
String类中已经重写了equals()方法;
在这里插入图片描述

欢迎java热爱者了解文章,作者将会持续更新中,期待各位友友的关注和收藏。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/34745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

地雷数量求解(二维数组)

问题描述 为了保证边境重要的军事基地不会被敌人入侵,我军在敌军的必经之路上埋了 𝑥 颗地雷,已知这片必经之地是 𝑛𝑚 的方阵形状,为了让我们的友军知道哪些地方是有地雷的,我军工兵绘制了一张…

LeetCode刷题之HOT100之乘积最大子数组

2024/6/25 六月也来到了末尾,刷题也刷了一个半月左右。收获还是有的,最起码打字快了哈哈,做题啦! 1、题目描述 2、逻辑分析 一眼动态规划。 解题思路 遍历数组时计算当前最大值,不断更新令nowMax 为当前最大值&…

java的线程

定义:在java中,线程是程序中一个独立的执行流,它拥有自己的核心运行逻辑和状态。在操作系统中,线程是进程的一部分,是程序执行的最小单元。 重要性:多线程使得程序能够更好的利用CPU资源,同时处…

AI大模型企业应用实战:Prompt让LLM理解知识

1 Prompt Prompt 可理解为指导AI模型生成特定类型、主题或格式内容的文本。 NLP中,Prompt 通常由一个问题或任务描述组成,如“给我写一篇有关RAG的文章”,这句话就是Prompt。 Prompt赋予LLM小样本甚至零样本学习的能力: LLM能力…

Linux驱动开发(三)--新字符设备驱动开发 LED驱动开发升级

1、新字符设备驱动原理 使用 register_chrdev 函数注册字符设备的时候只需要给定一个主设备号即可,但是这样会 带来两个问题 需要我们事先确定好哪些主设备号没有使用 会将一个主设备号下的所有次设备号都使用掉,比如现在设置 LED 这个主设备号为200&…

从50分到90分,网站性能优化实践

难以置信: 我可是用尊贵的Vue3Ts开发的呢 (手动狗头). 十分抗拒: 迫于yin威,我给网站做了体检和手术. 体检 – 市面上的体检套餐有很多种,但其实都是换汤不换药.那药(标准)是什么呢?我们会在下面说明.这里我选择了谷歌亲儿子"灯塔"(LightHouse)进行性能体检. 体检…

Scala入门:打造大数据处理的超能力(通俗易懂)

Scala是一门现代的多范式编程语言,它融合了面向对象和函数式编程的特点,被广泛应用于大数据处理领域。本文将详细介绍Scala的基本概念、使用方法、主要作用以及注意事项。 一、Scala简介 1. Scala的起源 Scala由Martin Odersky于2004年创建&#xff0c…

解决 vue 项目一直出现 sockjs-node/info?t=问题

其实如果是在开发环境,应该是开发的时候网络环境变更导致,比如你切换无线网络,导致开发服务器的IP地址换了,这样开发服务器会不知道如何确定访问源。开发环境中关闭npm dev server,然后重新npm run serve重新构建服务环…

探索AI世界系列:俗说AI智能体

AI agent,翻译为中文就是AI智能体。 什么是AI智能体呢? 一,GPT对AI智能体的定义 AI智能体,即人工智能体(Artificial Intelligence Agent),是具有自主性、学习能力和推理能力的计算机程序。 …

聚观早报 | 小鹏MONA M03曝光;iPhone 16系列电池改进

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 6月25日消息 小鹏MONA M03曝光 iPhone 16系列电池改进 一加Ace 3 Pro三款配色 字节跳动与博通合作开发AI芯片 蚂…

【性能优化】Android冷启动优化

文章目录 常见现象APP的启动流程计算启动时间Displayed Timeadb dump 启动优化具体策略总结参考链接 常见现象 各种第三方工具初始化和大量业务逻辑初始化,影响启动时间,导致应用启动延迟、卡顿等现象 APP的启动流程 加载和启动应用程序; …

学习笔记STMF4 TIMER定时器(使用开发板立创天空星STMF4)

目录 #定时器的介绍 #怎么去理解定时器的预分频系数 #使用定时器实现完成触发中断 #定时器触发中断基本函数配置 #在使用TIMER 触发中断的时候为什么不需要配置EXTI中断这个选项 #使用定时器完成输出PWM #PWM基本知识介绍 #函数配置生成PWM 这个系列所有笔记用来记录&#x…

【OnlyOffice】 桌面应用编辑器,版本8.1发布,PDF编辑器、幻灯片版式、改进从右至左显示、新的本地化选项等功能,快来体验吧

继 ONLYOFFICE 文档 8.1 发布后,适用于 Linux、Windows 和 macOS 的 ONLYOFFICE 桌面应用程序最新版本也已推出。它具有在线套件的最主要功能,例如功能齐全的 PDF 编辑器、演示文稿中的幻灯片版式、改进的 RTL 支持、新的本地化选项等。 目录 ONLYOFFICE…

手机看cad图的软件有哪些?软件推荐

手机看cad图的软件有哪些?随着科技的不断发展,CAD图纸在手机上的查看和编辑需求日益增加。为了满足这一需求,市面上涌现出了众多手机CAD看图软件。本文将为大家推荐四款优秀的手机CAD看图软件,并分别介绍它们的功能特点、受众定位…

JavaScript的学习之DOM简介

目录 一、DOM是什么 二、节点是什么(Node) 三、代码示例 一、DOM是什么 DOM全称Document Object Model文档对象模型 文档:表示整个HTML网页文档 对象:表示网页中的每一个部分转换为一个对象 模型:表示对象之间的关系…

LabVIEW开发电气设备检测与管理系统

设计并实现了一个基于LabVIEW的电气设备检测与管理系统,采用了先进的硬件设备(NI PXI-6289数据采集卡、Fluke 434电能质量分析仪和Schneider PM5560电力监控仪),通过实时采集、处理与存储电气设备数据,提高了电气设备的…

Go语言JSON-RPC 实战: `net/rpc/jsonrpc` 包的高效使用指南

Go语言JSON-RPC 实战: net/rpc/jsonrpc 包的高效使用指南 简介jsonrpc 包的基础客户端(Client)创建客户端调用方法 服务器(Server)配置服务器数据类型和错误处理 搭建基础的 JSON-RPC 服务服务端的实现客户端的实现 进…

60.Python-web框架-Django手动删除了一个数据库表,migrate问题

目录 1.问题产生 2.解决方法: 1.问题产生 今天手欠,删了一个数据库表,然后迁移不进来了。 当你在Django项目中手动删除了数据库模型(models)的表后,想要Django通过makemigrations命令重新创建或识别这些更…

[数据集][目标检测]斑马线人行横道检测数据集VOC+YOLO格式793张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):793 标注数量(xml文件个数):793 标注数量(txt文件个数):793 标注类别…

“拿来主义”学习元素裁剪(附源码)

“拿来主义”学习元素裁剪 欢迎关注: 小拾岁月,获取源码。 参考链接:https://mp.weixin.qq.com/s/TsOOhUAff6OeqPW7A9JuaQ 预期效果图 需求分析 首先从需求上来看,需要一个主元素用于展示用户头像。例外,在页面无操…