【Java基础面试宝典】hashCode和equals之间的关系?接口和抽象类的区别?Object类中的常用方法?— day03
创始人
2025-06-01 18:07:56
0

目录

hashCode和equals之间的关系

final关键字的作用是什么

是否可以从一个static方法内部发出对非static方法的调用?

接口和抽象类的区别(必会)

Object类中的常用方法

什么是String,它是什么数据类型?

创建String对象的不同方式有哪些?

如何让一个字符串变成小写或大写形式?

Java 中操作字符串都有哪些类?它们之间有什么区别?

String str="i"与 String str=new String("i")一样吗?


hashCode和equals之间的关系

每一个对象都可以调用hashCode方法得到自己的hash值,在一些集合中hashCode通常拿来做提前判断。通常会先进行hashCode()判断。

equals()相等的两个对象他们的hashCode()肯定相等,也就是用equal()对比是绝对可靠的。hashCode()相等的两个对象他们的equals()不一定相等,也就是hashCode()不是绝对可靠的。

对于需要大量并且快速的对比的话如果都用equals()去做显然效率太低,所以解决方式是,每当需要对比的时候,首先用hashCode()去对比,如果hashCode()不一样,则表示这两个对象肯定不相等(也就是不必再用equals()去再对比了),如果hashCode()相同,此时再对比他们的equals(),如果equals()也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性!


final关键字的作用是什么

final表示最终的、不可变的

修饰类 表示类不可被继承

修饰方法 表示方法不可被覆盖 无法被重写

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


是否可以从一个static方法内部发出对非static方法的调用?

不可以。static方法是静态方法,是属于类的方法,非static方法是属于对象的方法。因为非static方法是要与对象关联在一起的,必须在创建出一个对象后,才可以通过这个对象调用非static方法;而static方法可以直接通过类名来调用,不需要创建对象。也就是说,在一个static方法被调用时,还可能没有创建任何实例对象,此时如果从static内部发出对非static方法的调用,非static方法是无法关联到对象的。


接口和抽象类的区别(必会)

  • 实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。
  • 构造函数:抽象类可以有构造函数;接口不能有。
  • 实现数量:类可以实现很多个接口;但是只能继承一个抽象类。
  • 访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。


Object类中的常用方法

Object():默认构造方法,是所有类的父类 任何类都默认继承Object 它位于java.lang包中

clone():创建并返回此对象的一个副本

equals():比较两个对象是否相等, 在Object中equals跟==是一样的 一般子类都要重写这个方法

toString():返回该对象的字符串表示

hashCode():返回该对象的哈希值, Object中该方法默认返回该对象堆内存地址

getClass():获取对象运行时的class对象,返回一个对象的运行时类

notify():唤醒此对象监视器上等待的单个线程

notifyAll():唤醒此对象监视器上等待的所有线程

finalize():当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法

wait():导致当前的线程等待,直到其它线程调用此对象的notify()或notifyAll()

wait(long timeout):导致当前的线程等待调用此对象的notify()或notifyAll()

wait(long timeout, int nanos):导致当前的线程等待,直到其他线程调用此对象的notify()或notifyAll(),或其他某个线程中断当前线程,或者已超过某个实际时间量。

registerNatives():对本地方法进行注册


什么是String,它是什么数据类型?

String是定义在 java.lang 包下的一个类。属于引用数据类型。

String是不可变的,JVM使用字符串池来存储所有的字符串对象。


创建String对象的不同方式有哪些?

和使用其他类一样通过new关键字来创建。使用这种方式时,JVM创建字符串对象但不存储于字符串池。我们可以调用intern()方法将该字符串对象存储在字符串池,如果字符串池已经有了同样值的字符串,则返回引用。

使用双引号直接创建。使用这种方式时,JVM去字符串池找有没有值相等字符串,如果有,则返回找到的字符串引用。否则创建一个新的字符串对象并存储在字符串池。

String str = new String("abc");

String str1 = "abc";


如何让一个字符串变成小写或大写形式?

使用toUpperCase 和 toLowerCase 方法让一个字符串变为 大写或小写。

Java 中操作字符串都有哪些类?它们之间有什么区别?

操作字符串的类有:String、StringBuffer、StringBuilder。

String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象,而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。

StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但 StringBuilder 的性能却高于 StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。


String str="i"与 String str=new String("i")一样吗?

不一样,因为内存的分配方式不一样。String str="i"的方式,Java 虚拟机会将其分配到常量池中;而 String str=new String("i") 则会被分到堆内存中。


相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...