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能力…

提升LabVIEW开发效率的技术与工具

LabVIEW是一种强大的图形化编程环境,广泛应用于数据采集、仪器控制和工业自动化领域。提高LabVIEW开发效率对项目的成功至关重要。本文将从代码复用、开发工具、编程规范、测试与调试、团队协作和学习资源六个方面,详细介绍提升LabVIEW开发效率的技术与工…

使用注解配置 Spring AOP

在现代的 Spring 应用程序开发中,使用注解配置(Annotation-based configuration)已经成为了主流。相比于传统的 XML 配置,注解配置更为简洁和便捷,能够更好地集成到 Java 代码中,并提供了更好的可读性和维护…

Java Matcher类方法深度剖析:替换方法

1. 引言 在Java中,正则表达式是处理字符串的强大工具,而java.util.regex包中的Matcher类则是实现这一功能的核心。对于Java工程师而言,熟练掌握Matcher类的使用方法,无疑能够极大地提升字符串处理的效率和准确性。本文将对Matcher类的方法进行深度讲解,并按照查找和匹配方…

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

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

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

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

multiprocessing 模块的 Manager

multiprocessing 模块的 Manager 类提供了一个机制,允许多个进程共享数据结构。 Manager 对象可以创建多种可被多个进程共享的数据结构,如列表、字典、集合等。以下是 Manager 的一些常用属性和方法: 属性: address : 包含绑定到…

使用Spring Boot 3.x结合专有算法生成电子印章

本章将是关于如何用Spring Boot 3.x实现网上政务统一电子印章的一站式解决方案。我们将深度探讨电子印章的生成、管理、应用,并探讨其在不同平台的兼容性问题和OCR技术的应用。同时,也会讨论如何结合电子签章、电子印章与文档的绑定,以及印章…

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…

AttributeError: module ‘cv2‘ has no attribute ‘face‘

Traceback (most recent call last): File "D:\AI_37\pythonProject7\day23\课堂代码\day23\07-人脸识别.py", line 4, in <module> recognizer cv2.face.LBPHFaceRecognizer_create() ^^^^^^^^ AttributeError: module cv2 has no at…

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

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

Python装饰器:深入解析与实用案例

Python装饰器&#xff1a;深入解析与实用案例 在Python编程中&#xff0c;装饰器&#xff08;Decorators&#xff09;是一个强大且优雅的功能&#xff0c;它允许我们在不修改函数或类代码的情况下&#xff0c;给它们添加额外的功能。装饰器在日志记录、性能分析、权限检查等场…