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

news2024/12/23 5:27:31

文章目录

  • 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;
    }

    @Override
    public 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;
    }

    @Override
    public 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;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    @Override
    public 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.coloradmin.cn/o/1860107.html

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

相关文章

JavaWeb系列十三: 服务器端渲染技术(JSP) 下

韩顺平 2. EL表达式2.1 EL表达式快速入门2.2 EL表达式输出形式2.3 el运算符2.4 empty运算2.5 EL获取四个域数据2.6 EL获取HTTP相关信息 3. JSTL标签库3.1 jstl 快速入门3.2 <c:set/>标签3.3 <c:if/>标签3.4 <c:choose/>标签3.5 <c:forEach/>标签3.6 作…

蓝牙技术|苹果iOS 18的第三方配件将支持AirPods / AirTag的配对体验

苹果公司在 iOS 18 系统中引入了名为 AccessorySetupKit 的新 API&#xff0c;用户不需要进入蓝牙设置和按下按钮&#xff0c;系统就能识别附近的配件&#xff0c;并提示用户进行配对。首次向配件制造商开放这种配对体验。 iPhone 用户升级 iOS 18、iPad 用户升级到 iPadOS 1…

SAP BC 修改 FINS_ACDOC_CUST116 ERROR 为 WARNING 信息

FI再改如下配置时报错了 消息号 FINS_ACDOC_CUST116 参考 SAP 消息控制_sap消息号更改w为e-CSDN博客 需要指出的是你必须注意做重要的三个表 T100:包含所有的message T100C:你定义的message通常将出现在此表 T100s:Configurable system messages顾名思义就是你能设置的消息…

游戏AI的创造思路-技术基础-深度学习(4)

下面的内容是让AI进行左右互博&#xff0c;这就是传说中的GAN对抗网络 当然&#xff0c;周伯通和GAN真的是难兄难弟&#xff0c;欲练神功&#xff0c;结果被黄药师&#xff08;欺骗&#xff09;坑了 目录 3.4. 生成对抗网络&#xff08;GAN&#xff09; 3.4.1. 定义 3.4.2.…

JVM专题四:JVM的类加载机制

Java中类的加载阶段 类加载 Java中的类加载机制是Java运行时环境的一部分&#xff0c;确保Java类可以被JVM&#xff08;Java虚拟机&#xff09;正确地加载和执行。类加载机制主要分为以下几个阶段&#xff1a; 加载&#xff08;Loading&#xff09;&#xff1a;这个阶段&#x…

ServBay[中文] 下一代Web开发环境

ServBay是一个集成式、图形化的本地化Web开发环境。开发者通过ServBay几分钟就能部署一个本地化的开发环境。解决了Web开发者&#xff08;比如PHP、Nodejs&#xff09;、测试工程师、小型团队安装和维护开发测试环境的问题&#xff0c;同时可以快速的进行环境的升级以及维护。S…

【源码+文档+调试讲解】校园商铺管理系统

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;校园商铺当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了校园商铺的发展&#xff0c;它彻底改变了过去传统的管理方…

WARP 加速您的 AI 数据存储基础设施

你知道一些最好的人工智能模型的秘诀吗&#xff1f;这是他们可以访问的数据量&#xff0c;他们可以接受培训。对于 AI/ML 模型&#xff1a;快速访问数据为王。让我强调一下&#xff0c;这不仅仅是数据&#xff0c;而是快速访问的数据。如果有人可以构建更快、更强大的模型&…

量子计算的崛起:开启计算新纪元

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

外贸SEO工具有哪些推荐?

"我们作为一个专业的Google SEO团队&#xff0c;比较推荐一下几个适合外贸SEO的工具。Ahrefs 是一个非常强大的工具&#xff0c;可以帮助你深入分析竞争对手的表现&#xff0c;找到有潜力的关键词&#xff0c;还可以监控你的网站链接状况。另外&#xff0c;SEMrush 也很不…

unity使用XR插件开发SteamVR项目,异常问题解决方法

一、unity使用XR插件开发SteamVR项目&#xff0c;运行后相机高度异常问题解决方法如下操作 &#xff08;一&#xff09;、开发环境 1、Unity 2021.3.15f 2、XR Interaction Toolkit Version 2.5.2 &#xff08;com.unity.xr.interaction.toolkit&#xff09; 3、OpenXR Pl…

互联网IT公司网站选择科技蓝,从来没让人失望过。

选择科技蓝色作为IT官网的主题颜色有以下好处&#xff1a; 专业感&#xff1a;科技蓝色通常与科技、创新和专业相关联&#xff0c;使用科技蓝色可以给访问者一种专业、可靠的印象&#xff0c;增强品牌形象&#xff0c;特别适合IT行业。技术感&#xff1a;科技蓝色给人一种科技…

现身说法,AI小白的大模型学习过程

导读 写这篇文章的初衷&#xff1a;作为一个AI小白&#xff0c;把我自己学习大模型的学习路径还原出来&#xff0c;包括理解的逻辑、看到的比较好的学习材料&#xff0c;通过一篇文章给串起来&#xff0c;对大模型建立起一个相对体系化的认知&#xff0c;才能够在扑面而来的大…

微信小程序笔记 七!

页面配置 1. 页面配置文件的作用 小程序中&#xff0c;每个页面都有自己的 .json 配置文件&#xff0c;用来对当前页面的窗口外观、页面效果等进行配置。 2. 页面配置和全局配置的关系 小程序中&#xff0c;app.json 中的 window 节点&#xff0c;可以全局配置小程序中每个…

AVI 是什么格式,AVI 格式用什么播放器打开?

AVI 是什么格式&#xff1f;提到 AVI 格式想必大家多数会想到在 DVD 横行的年代&#xff0c;光盘中所包含的媒体视频格式多是以 AVI 格式存储。AVI 是一个非常通用的容器格式&#xff0c;支持多种视频和音频编解码器。这意味着从DVD中提取视频内容时&#xff0c;可以通过转码为…

国际网络专线怎么开通?

在全球化日益加速的今天&#xff0c;企业越来越需要稳定、高效的网络来支撑他们的跨国业务。国际网络专线&#xff0c;作为外贸企业、出海企业等拓展全球业务的关键基础设施&#xff0c;其重要性不言而喻。那么&#xff0c;企业如何才能开通国际网络专线呢&#xff1f;本文将详…

嵌入式系统习题库及答案

嵌入式系统习题库及答案 ## 1&#xff0e;选择题 1&#xff0e; 以下哪个不是嵌入式系统的设计的三个阶段之一&#xff1a;&#xff08;A&#xff09; A 分析 B 设计 C 实现 D 测试 2&#xff0e; 以下哪个不是RISC架构的ARM微处理器的一般特点&#xff1a;&#xff08…

展厅设计规划都有哪些重要性

1、明确展览目标 在展厅设计上一定要有一个清晰的目标&#xff0c;现在互联网多媒体技术的出现&#xff0c;对于展厅设计有很大的帮助。而获得效益是进行展厅展馆设计的根本意图&#xff0c;在展厅展馆规划过程中需要对展览的目标以及展览的技术手段进行剖析和匹配&#xff0c;…

mysql中存储过过程和游标的联合使用

1.SQL如下&#xff1a; DELIMITER // DROP PROCEDURE IF EXISTS PrintAllEmployeeNames5; CREATE PROCEDURE PrintAllEmployeeNames5() BEGINDECLARE error_count INT DEFAULT 0;DECLARE num INT ;DECLARE done INT DEFAULT 0;DECLARE id1 BIGINT DEFAULT 0;DECLARE address VA…

Mysql----表的约束

提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、表的约束 表的约束&#xff1a;表中一定要有约束&#xff0c;通过约束让插入表中的数据是符合预期的。它的本质是通过技术手段&#xff0c;让程序员插入正确的数据&#xff0c;约束的最终目标是保证…