Object类--equals方法--java进阶day05
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的更多相关文章
- Object类--equals方法
equals方法 1.比较的是对象引用的是否指向同一块内存地址 public static void main(String[] args) { HuaWei huawei=new HuaWei(); ...
- 面向对象编程(四)继承,概念及super关键字,final关键字,Object类常见方法
继承 概念: ① 继承背后的思想就是基于已存在的类来构建新类; ② 当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求; ③ 当从其它类导出的类叫作子 ...
- Java基础(43):Java中的Object类与其方法(转)
Object类 java.lang.Object java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. O ...
- 别样JAVA学习(五)继承上(1.0)Object类equals()
上一节继承下(一)我们进行抽象类.接口以及多态的学习. 接下来大家我们讲点特殊的东西就是object类, 我们一直在说继承,子继承了父,父还有没有父类呢, 为什么这么思考,大家想构造函数的第一行是不是 ...
- Java温故而知新(7)Object类及其方法讲解
一.java.lang.Object java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. Object类 ...
- Java:面向对象(继承,方法的重写(overide),super,object类及object类中方法的重写,父子类代码块执行顺序)
继承: 1.继承是对某一匹类的抽象,从而实现对现实世界更好的建模. 2.提高代码的复用性. 3.extends(扩展),子类是父类的扩展. 4.子类继承父类可以得到父类的全部属性和方法.(除了父类的构 ...
- 使用hashCode()和equals()方法 - Java
在这篇文章中,我将指出我对hashCode()和equals()方法的理解.我将讨论它们的默认实现以及如何正确地覆盖它们.我还将使用Apache Commons包中的实用工具类来实现这些方法. has ...
- Object类的方法
一 Object:类Object是类层次结构的跟类,每个类都使用Object作为超类,每个类都是直接或者间接的继承自Object类. Object类的方法: ①public int hashCode( ...
- Java Object类的方法
1. Java中所有的类都直接或者间接地继承自Object类.当没有显式地声名一个类的父类时,它会隐式地继承Object类. 2. Object类中定义了适合于任何Java对象的方法. String ...
- Java中Object类的方法笔记
今天看了下Object类的源码,以下是我看源码的一些笔记,欢迎有小伙伴来补充~ 首先列举下几个主要方法(面试被问到过的): equals:这个主要是用于比较对象的,Object中比较的是比较原始的,直 ...
随机推荐
- Verilog3_组合逻辑电路
组合逻辑电路设计方法 使用assign语句: 描述简单的组合逻辑电路 使用always块: 描述复杂的组合逻辑电路 要点: 只在一个always模块中对某一变量进行赋值: 将所有敏感变量列在敏感变量列 ...
- Mac terminal proxy
cat >> ~/.bash_profile << EOF function proxy_on() { export http_proxy=http://127.0.0.1:7 ...
- Solution -「LOJ #6895」Yet Another NPC Problem
\(\mathscr{Description}\) Link. 给定 \(l,m\),求当 \(k=m,m+1,\dots,m+l-1\) 时,所有 \(k\) 阶有标号简单无向图中,最大团大 ...
- refs转发
ref 转发不但可以转发指向具体的dom组件,也可以指向class组件的实例 import React from 'react' import ReactDOM from 'react-dom'; / ...
- 足球预测:将六场预测法引入AI能增加预测准确率么?
前言 足球预测的历史可以追溯到200多年前,对足球比赛的结果预测一直是人们所津津乐道的话题.你有了解过这期间涌现过多少足球预测的方法么?过去的人们迫于工具和数据的限制,始终不能高概率的预测足球赛事,但 ...
- python 控制流程
条件语句 if语法 if True: print("hello") print("world!") 输出: helloworld! 举例: "&quo ...
- MySQL插入修改和删除
原文链接:https://blog.liuzijian.com/post/36d9bcaa-2ba7-26ca-6f97-b8ef7a058e95.html 插入 支持一次性插入多行,支持子查询 IN ...
- Kotlin:【数字类型】安全转换函数
- Pebbles pg walkthrough Easy
NMAP ┌──(root㉿kali)-[/home/ftpuserr] └─# nmap -p- -A -sS 192.168.239.52 Starting Nmap 7.95 ( https:/ ...
- manim边学边做--局部变换
本次介绍的两个用于变换的动画类:TransformMatchingShapes和TransformMatchingTex. 它们的主要特点是对一组对象或一段文本进行局部变换,适用于复杂的图形或者文本的 ...