【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") 则会被分到堆内存中。


相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...