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


      大家好,我是陶然同学,软件工程大三明年实习。认识我的朋友们知道,我是科班出身,学的还行,但是对面试掌握不够,所以我将用这100多天更新Java面试题🙃🙃。

      不敢苟同,相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知面试重要性,接下来我准备用100天时间,基于Java岗面试中的高频面试题,以每日3题的形式,带你过一遍热门面试题及恰如其分的解答。当然,我不会太深入,因为我怕记不住!!

      因此,不足的地方希望各位在评论区补充疑惑、见解以及面试中遇到的奇葩问法,希望这100天能够让我们有质的飞越,一起冲进大厂!!,让我们一起学(juan)起来!!!

    目录

    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 ,对它初始化后,我就不让你再去修改这个变量,就保证了内部类的成员
    变量和方法的局部变量的一致性。这实际上也是一种妥协。使得局部变量与内部类内建立的拷贝保
    持一致。
  • 相关阅读:
    后端启动项目总是显示端口被占用
    Go---字典(map)
    Java进阶篇--并发容器之ThreadLocal
    软件测试缺陷报告
    eslint写jsx报错
    MongoDB 主从集群 1
    LabVIEW开发带式谱感测技术
    1312. 让字符串成为回文串的最少插入次数
    NTP授时服务器(GPS授时器)在DCS系统应用
    2020秋招Java面试题
  • 原文地址:https://blog.csdn.net/weixin_45481821/article/details/127929153