java 面向对象--equals方法

news2024/11/16 20:42:47

Object 类的使用

java.lang.Object是类层次结构的根类,即所有其它类的父类。每个类都使用 Object 作为超类。

Object类型的变量与除Object以外的任意引用数据类型的对象都存在多态引用

method(Object obj){…} //可以接收任何类作为其参数

Person o = new Person();  
method(o);

 

  • 所有对象(包括数组)都实现这个类的方法。

  • 如果一个类没有特别指定父类,那么默认则继承自Object类。例如:

public class Person {
    ...
}
//等价于:
public class Person extends Object {
    ...

Object类的方法

 

1、(重点)equals()

= = :基本类型比较值:只要两个变量的值相等,即为true。

int a=5; 
if(a==6){…}

引用类型比较引用(是否指向同一个对象):只有指向同一个对象时,==才返回true。

Person p1=new Person();          
Person p2=new Person();
if (p1==p2){…}

用“==”进行比较时,符号两边的数据类型必须兼容(可自动转换的基本数据类型除外),否则编译出错

equals():所有类都继承了Object,也就获得了equals()方法。还可以重写。

只能比较引用类型,Object类源码中equals()的作用与“==”相同:比较是否指向同一个对象。

  • 格式:obj1.equals(obj2)

  • 特例:当用equals()方法进行比较时,对类File、String、Date及包装类(Wrapper Class)来说,是比较类型及内容而不考虑引用的是否是同一个对象;

    • 原因:在这些类中重写了Object类的equals()方法。

  • 当自定义使用equals()时,可以重写。用于比较两个对象的“内容”是否都相等

  • 重写equals()方法的原则

    • 对称性:如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是“true”。

    • 自反性:x.equals(x)必须返回是“true”。

    • 传递性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”。

    • 一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是“true”。

    • 任何情况下,x.equals(null),永远返回是“false”;

      x.equals(和x不同类型的对象)永远返回是“false”。

package equals;

/**
 * ClassName: User
 * Package: equals
 * Description:
 *
 * @Author 吴伟贤
 * @Create 2024/3/18 21:16
 * @Version 1.0
 */
public class User {
    private String name;
    private int age;

    public User() {
    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }


    @Override//为什么equals(Object obj)参数为Object类型,因为Object是所以类的父类。
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj instanceof User) {//使用instanceof确保传进来的对象是User类

            User user = (User) obj;//多态,强转 转为user对象,对象.调用成员属性
            return this.age == user.age && this.name.equals(user.name);
        }
        return false;
    }

    public static void main(String[] args) {
        User user1 = new User("wwx", 22);
        User user2 = new User("wwx", 22);

        System.out.println(user1 == user2);
        System.out.println(user1.equals(user2));//重写equals方法后 false->true 重写的意义为了判断两对象属性是否相等
//        String s = new String("hello");
//        String s1 = new String("hello");
//
//        System.out.println(s == s1);
//        System.out.println(s.equals(s1));

        String s = "AAA";//字符常量池中只会有一个AAA. s,s1都指向这一个
        String s1 = "AAA";
        System.out.println(s==s1);//true 

    }
}

面试题:==和equals的区别

  • == 既可以比较基本类型也可以比较引用类型。对于基本类型就是比较值,对于引用类型就是比较内存地址

  • equals的话,它是属于java.lang.Object类里面的方法,如果该方法没有被重写过默认也是==;我们可以看到String等类的equals方法是被重写过的,而且String类在日常开发中用的比较多,久而久之,形成了equals是比较值的错误观点。

  • 具体要看自定义类里有没有重写Object的equals方法来判断。

  • 通常情况下,重写equals方法,会比较类中的相应属性是否都相等。

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

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

相关文章

【NTN 卫星通信】 TN和多NTN配合的应用场景

1 场景描述 此场景描述了农村环境,其中MNO (运营商TerrA)仅在城市附近提供本地地面覆盖,而MNO (SatA)提供广泛的NTN覆盖。SatA使用GSO轨道和NGSO轨道上的卫星。SatA与TerrA有漫游协议,允许:   所有TerrA用户的连接,当这些用户不…

超分之SwinIR

SwinIR: Image restoration using Swin TransformerSwinIR: 使用Swin Transformer 进行图像恢复Liang J, Cao J, Sun G, et al.Proceedings of the IEEE/CVF international conference on computer vision. 2021: 1833-1844. 摘要 首先,介绍了Image restoration的含…

Ingress 基于URL路由多个服务

文章目录 前言一、基于请求地址转发不同应用的pod1.创建一个nginx的pod和一个apache的pod及其各自的service2.创建ingress实现一个地址两个path分别访问nginx和apache3.验证根据域名web2.study.com的两个路径/foo和/bar来访问到不同的pod4.分别在nginx和apache的pod里创建网站目…

win32汇编弹出对话框

之前书上有一个win32 asm 的odbc例子,它有一个窗体,可以执行sql;下面看一下弹出一个录入数据的对话框; 之前它在.code段包含2个单独的asm文件,增加第三个,增加的这个里面是弹出对话框的窗口过程&#xff0…

Python--类中作用域

1、在面向对象编程中,主要的变量就是成员变量(属性)和局部变量 class Cat:# 属性name Noneage None# n1, n2, result为局部变量def cal(self, n1, n2):result n1 n2print(f"result{result}") 2、作用域的分类:属性…

Vue3-03_组件基础_上

单页面应用程序 什么是单页面应用程序 单页面应用程序(英文名:Single Page Application)简称 SPA,顾 名思义,指的是一个 Web 网站中只有唯一的一个 HTML 页面,所有的 功能与交互都在这唯一的一个页面内完…

09|代理(上):ReAct框架,推理与行动的协同

应用思维链推理并不能解决大模型的固有问题:无法主动更新自己的知识,导致出现事实幻觉。也就是说,因为缺乏和外部世界的接触,大模型只拥有训练时见过的知识,以及提示信息中作为上下文提供的附加知识。如果你问的问题超…

Fitten Code对JetBrains支持再升级,新增7大功能

十科技基于计图框架,推出基于代码大模型的 AI 代码助手 ——Fitten Code,今天,Fitten Code再升级,新增7大功能。特此转载。 「一键开启编程新时代,Fitten Code 对 JetBrains 支持再升级!」 Fitten Code代码…

新火种AI|英伟达GTC大会在即,它能否撑住场面,为AI缔造下一个高度?

作者:小岩 编辑:彩云 英伟达不完全属于AI行业,但神奇的是,整个AI领域都有着英伟达的传说。因为几乎所有的AI巨头都需要英伟达的芯片来提供算力支持。 也正因此,纵使AI赛道人来人往,此起彼伏,…

zabbix企业微信接入结合海螺问问编写的shell脚本

前言 博客懒得写详细了,视频剪的累死了,看视频就好了 白帽小丑的个人空间-白帽小丑个人主页-哔哩哔哩视频 shell脚本 #!/bin/bash #set -x CorpID"" #我的企业下面的CorpID Secret"" #创建的应用那…

阿里云服务器计算型、通用型、内存型各实例计算、存储等性能介绍

在阿里云目前的活动中,属于计算型实例规格的云服务器有计算型c7、计算型c7a、计算型c8a、计算型c8y这几个实例规格,属于通用型实例规格的云服务器有通用型g7、通用型g7a、通用型g8a、通用型g8y,属于内存型实例规格的云服务器有内存型r7、内存…

Linux信号机制(二)

目录 一、信号的阻塞 二、信号集操作函数 三、sigprocmask函数 四、pause函数 五、sigsuspend函数 一、信号的阻塞 有时候不希望在接到信号时就立即停止当前执行,去处理信号,同时也不希望忽略该信号,而是延时一段时间去调用信号处理函数。…

【闲聊】-后端框架发展史

框架,是为了解决系统复杂性,提升开发效率而产生的工具,主要服务于研发人员。 当然,框架还有更深层的作用,框架的沉淀是一种高级的抽象,会将人类的业务逐步抽象为统一标准又灵活可变的结构,为各行…

Java-CAS 原理与 JUC 原子类

由于 JVM 的 synchronized 重量级锁涉及到操作系统(如 Linux) 内核态下的互斥锁(Mutex)的使用, 其线程阻塞和唤醒都涉及到进程在用户态和到内核态频繁切换, 导致重量级锁开销大、性能低。 而 JVM 的 synchr…

影响汇率的因素?fpmarkets澳福总结几个

汇率对于刚刚开始外汇交易的新手来说非常重要,这不是没有道理的,了解汇率如何变化以及怎么变化有助于在外汇交易中获得稳定的利润。那么影响汇率的因素有哪些?fpmarkets澳福总结几个。 任何国家货币的汇率都是由市场决定的。主要的市场因素是…

汽车网络基础知识 要点

在以太网开发中,常常会听到一些专业名词,例如PHY,MAC,MII,switch,下面是解释 PHY PHY 是物理接口收发器,它实现物理层。包括 MII/GMII (介质独立接口) 子层、PCS (物理编码子层) 、PMA (物理介…

高颜值HMI触控界面一出,价值感飙升,瞬间感觉消费不起了。

千万不要觉得用户很理性,其实用户都是“好色之徒”,判断产品价值基本上靠眼睛,颜值高的价格高,质量高,反之质量低,价格低。如果通过精心的高颜值设计,能让你的产品价值感拉满,你不心…

html密码访问单页自定义跳转页面源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 密码访问单页自定义跳转页面,修改了的密码访问单页,添加了js自定义密码跳转页面。需要正确输入密码才能跳转目标网址。 二、效果展示 1.部分代码 代码如下&…

等保测评的知识

结合自己所学的知识和网络上的一些知识做个小总结。 目录 一、概念: 二、等级划分: 三、技术要求: 四、管理要求: 五、等保测评实施过程: 六、典型的网络架构: 一、概念: 全称为信息安全等级保…

Vue2(五):收集表单数据、过滤器、自定义指令、Vue的生命周期

一、收集表单数据 爱好&#xff1a;学习<input type"checkbox" value"study" v-model"hobby">打游戏<input type"checkbox" value"games" v-model"hobby">吃饭<input type"checkbox" v…