1.equals方法

2.equals方法的逻辑

如图,我们发现调用equals方法将两个属性一样的变量进行比较时,返回的还是false



为了了解清楚equals方法的逻辑,我们ctrl 鼠标右键点击equals方法进入方法内部

如上图,默认的equals方法使用等号,比较的是两个变量的地址,非常鸡肋,这也是刚才返回false的原因

3.重写equals方法

当某个方法默认功能非常鸡肋时,我们便可以使用重写,改进其功能

equals方法将来肯定会被调用,发起调用的对象在equals方法里就可以用this表示,而另一个就作为参数obj传递过来

因为stu1和stu2无法直接在equals方法里使用,所以要强调this和obj

如下图,出现这种问题,是因为多态

形参是父类,这里我们传递的是子类,使用了多态

多态成型后,调用成员变量的时候,编译会看父类,而父类Object,很明显是没有我们定义的age的,所以会报错

因此,我们使用向下转型

此时,age和name便都可以进行比较了

3.重写equals后的安全隐患

在上图,我们写的代码还存在安全隐患,如图

Arraylist也是Object的子类,按照道理也可以放入形参,但是Arraylist和Student明显类型不同

调用equals方法后,会向下转型,就会出现类型转换异常



.

解决方法也很简单,使用instanceof关键字解决

Object类--equals方法--java进阶day05的更多相关文章

  1. Object类--equals方法

    equals方法 1.比较的是对象引用的是否指向同一块内存地址 public static void main(String[] args) { HuaWei huawei=new HuaWei(); ...

  2. 面向对象编程(四)继承,概念及super关键字,final关键字,Object类常见方法

    继承 概念: ①   继承背后的思想就是基于已存在的类来构建新类; ②   当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求; ③   当从其它类导出的类叫作子 ...

  3. Java基础(43):Java中的Object类与其方法(转)

    Object类 java.lang.Object java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. O ...

  4. 别样JAVA学习(五)继承上(1.0)Object类equals()

    上一节继承下(一)我们进行抽象类.接口以及多态的学习. 接下来大家我们讲点特殊的东西就是object类, 我们一直在说继承,子继承了父,父还有没有父类呢, 为什么这么思考,大家想构造函数的第一行是不是 ...

  5. Java温故而知新(7)Object类及其方法讲解

    一.java.lang.Object java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. Object类 ...

  6. Java:面向对象(继承,方法的重写(overide),super,object类及object类中方法的重写,父子类代码块执行顺序)

    继承: 1.继承是对某一匹类的抽象,从而实现对现实世界更好的建模. 2.提高代码的复用性. 3.extends(扩展),子类是父类的扩展. 4.子类继承父类可以得到父类的全部属性和方法.(除了父类的构 ...

  7. 使用hashCode()和equals()方法 - Java

    在这篇文章中,我将指出我对hashCode()和equals()方法的理解.我将讨论它们的默认实现以及如何正确地覆盖它们.我还将使用Apache Commons包中的实用工具类来实现这些方法. has ...

  8. Object类的方法

    一 Object:类Object是类层次结构的跟类,每个类都使用Object作为超类,每个类都是直接或者间接的继承自Object类. Object类的方法: ①public int hashCode( ...

  9. Java Object类的方法

    1. Java中所有的类都直接或者间接地继承自Object类.当没有显式地声名一个类的父类时,它会隐式地继承Object类. 2. Object类中定义了适合于任何Java对象的方法. String ...

  10. Java中Object类的方法笔记

    今天看了下Object类的源码,以下是我看源码的一些笔记,欢迎有小伙伴来补充~ 首先列举下几个主要方法(面试被问到过的): equals:这个主要是用于比较对象的,Object中比较的是比较原始的,直 ...

随机推荐

  1. ArrayList源码解析-JDK18

    引言 ArrayList在JDK1.7和1.8中的差距并不大,主要差距以下几个方面: JDK1.7 在JDK1.7中,使用ArrayList list = new ArrayList()创建List集 ...

  2. Java 中toString方法在枚举中的应用:展示枚举字段信息

    在Java编程中,枚举(enum)是一种特殊的数据类型,它允许程序员定义一组固定的常量.枚举类型在Java中非常有用,尤其是在需要表示一组固定选项(如星期.月份.方向等)时.尽管枚举类型在定义时看起来 ...

  3. CDS标准视图:维护包数据 I_MaintenancePackageData

    视图名称:维护包数据 I_MaintenancePackageData 视图类型:基础 视图代码: 点击查看代码 @AbapCatalog.sqlViewName: 'IMAINTPCKGDATA' ...

  4. WPF 获取拖拽网页图片链接

    在浏览器里拖拽一个元素,我只获取图片链接 private void Grid_PreviewDragOver(object sender, DragEventArgs e) { e.Effects = ...

  5. 【Netty】(3)—源码NioEventLoopGroup

    netty(3)-源码NioEventLoopGroup 一.概念 NioEventLoopGroup对象可以理解为一个线程池,内部维护了一组线程,每个线程负责处理多个Channel上的事件,而一个C ...

  6. springBoot(1)--初步理解

    在没有用SpringBoot之前,我们用spring和springMVC框架,但是你要做很多比如: (1)配置web.xml,加载spring和spring mvc 2)配置数据库连接.配置sprin ...

  7. System类、Math类、BigInteger与BigDecimal的使用

     System类代表系统,系统级的很多属性和控制方法都放置在该类的内部.该类位于java.lang包. 由于该类的构造器是private的,所以无法创建该类的对象,也就是无法实例化该类.其内部的成 ...

  8. 使用SOUI4的脚本模块

    SOUI4.1提供了全新的lua脚本模块支持,使用这个新版本的脚本模块,可以轻松将所有UI布局及业务逻辑全部使用XML+LUA实现,基本上就是一个超轻型浏览器. SOUI4.0相对于SOUI3最大的区 ...

  9. CDN在互联网直播中的运用与性能优化

    本文分享自天翼云开发者社区<CDN在互联网直播中的运用与性能优化>,作者:不知不觉 随着互联网技术的不断发展,互联网直播已成为人们获取信息.娱乐.学习等多种需求的重要途径之一.然而,在直播 ...

  10. Prometheus修改数据存储位置

    Prometheus修改数据存储位置 Prometheus的数据存储位置可以通过配置文件中的 --storage.tsdb.path 参数来指定.默认情况下,数据存储在Prometheus安装目录下的 ...