java中的final和Object类

Java中的final和Object类

修饰变量

  • 基本类型(值不能改变)
  • 引用类型(引用的地址不能改变)
  • final修饰全局变量必须提前赋值
  • final修饰局部变量可以不在声明的时候赋值,但必须在使用之前赋值

修饰方法

  • 修饰的方法不能被重写(使用场景:如果一个类的某个方法不能被重写,那么可以用final关键字修饰)

修饰类(无后类)

  • final修饰的类不能被继承

final可以防止指令重排序,保证线程安全

Object类

常见的方法

  • equals()
  • hashCode()

经典面试题

为什么在重写equals方法时要重写hashCode方法(简便记忆:提高性能)

首先明白什么是hash冲突,其实也就是指的是hash值相同,

然后就是明白equals和hashCode方法之间的关系:

  • 如果两个对象相同,那么他们的hash值肯定相同
  • 如果两个对象不同,那么他们的hash值可能相同,也可能不同
  • 如果两个对象的hash值相同,他们可能相同,也可能不同
  • 如果两个对象的hash值不同,他们肯定不同

因此,如果只使用equals进行比较的话,那样效率比较低,而如果先使用hashCode获得hash值,如果hash值不能就直接返回false,否则继续进行比较,这样可以大大的提高效率,因此在重写equals方法时,要重写hashCode方法进行优化。

posted @ 2024-04-14 16:48  ning12  阅读(23)  评论(0)    收藏  举报