前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java面试八股文宝典之基础篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day09

【Java面试八股文宝典之基础篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day09

作者头像
陶然同学
发布2023-02-24 13:31:17
2770
发布2023-02-24 13:31:17
举报
文章被收录于专栏:陶然同学博客

目录

hashCode()与equals()之间的关系

简述final作用

为什么局部内部类和匿名内部类只能访问局部final变量? 

hashCode()与equals()之间的关系

在Java中,每个对象都可以调⽤⾃⼰的hashCode()⽅法得到⾃⼰的哈希值(hashCode),相当于对

象的指纹信息,通常来说世界上没有完全相同的两个指纹,但是在Java中做不到这么绝对,但是我

们仍然可以利⽤hashCode来做⼀些提前的判断,⽐如:

● 如果两个对象的hashCode不相同,那么这两个对象肯定不同的两个对象

● 如果两个对象的hashCode相同,不代表这两个对象⼀定是同⼀个对象,也可能是两个对象

● 如果两个对象相等,那么他们的hashCode就⼀定相同

在Java的⼀些集合类的实现中,在⽐较两个对象是否相等时,会根据上⾯的原则,会先调⽤对象的

hashCode()⽅法得到hashCode进⾏⽐较,如果hashCode不相同,就可以直接认为这两个对象不

相同,如果hashCode相同,那么就会进⼀步调⽤equals()⽅法进⾏⽐较。⽽equals()⽅法,就是⽤

来最终确定两个对象是不是相等的,通常equals⽅法的实现会⽐较重,逻辑⽐较多,⽽

hashCode()主要就是得到⼀个哈希值,实际上就⼀个数字,相对⽽⾔⽐较轻,所以在⽐较两个对

象时,通常都会先根据hashCode想⽐较⼀下。 所以我们就需要注意,如果我们重写了equals()⽅

法,那么就要注意hashCode()⽅法,⼀定要保证能遵守上述规则。

简述final作用

最终的

修饰类:表示类不可被继承

修饰方法:表示方法不可被子类覆盖,但是可以重载

修饰变量:表示变量一旦被赋值就不可以更改它的值。

(1)修饰成员变量

如果 final 修饰的是类变量,只能在静态初始化块中指定初始值或者声明该类变量时指定初始值。

如果 final 修饰的是成员变量,可以在非静态初始化块、声明该变量或者构造器中执行初始值。

(2)修饰局部变量

系统不会为局部变量进行初始化,局部变量必须由程序员显示初始化。因此使用 final 修饰局部变量

时, 即可以在定义时指定默认值(后面的代码不能对变量再赋值),也可以不指定默认值,而在

后面的代码 中对final 变量赋初值(仅一次)

(3)修饰基本类型数据和引用类型数据

如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;

如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。 但是引用的值是可变

为什么局部内部类和匿名内部类只能访问局部final变量?

首先需要知道的一点是 : 内部类和外部类是处于同一个级别的,内部类不会因为定义在方法中就会

随着 方法的执行完毕就被销毁。

这里就会产生问题:当外部类的方法结束时,局部变量就会被销毁了,但是内部类对象可能还存在

( 只有没有人再引用它时,才会死亡) 。这里就出现了一个矛盾:内部类对象访问了一个不存在的变

量。为了解决这个问题,就将局部变量复制了一份作为内部类的成员变量,这样当局部变量死亡

后,内部类仍可以访问它,实际访问的是局部变量的"copy" 。这样就好像延长了局部变量的生命周

期将局部变量复制为内部类的成员变量时,必须保证这两个变量是一样的,也就是如果我们在内部

类中修改了成员变量,方法中的局部变量也得跟着改变,怎么解决问题呢?

就将局部变量设置为 final ,对它初始化后,我就不让你再去修改这个变量,就保证了内部类的成员

变量和方法的局部变量的一致性。这实际上也是一种妥协。使得局部变量与内部类内建立的拷贝保

持一致。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • hashCode()与equals()之间的关系
  • 简述final作用
  • 为什么局部内部类和匿名内部类只能访问局部final变量?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档