java面试题汇总

JoeYD / 2024-05-01 / 原文

基础篇

1、java中 == 和 equals 的区别?

== 是比较运算符,Equals 是方法

== 在判断基本数据类型的时候,就是判断数值是否相等,比如int 10 和 int 20的时候就是判断10 和20 这两个数是否相等

== 在判断引用数据类型的时候,也就是对象是否相等的时候,判断的是内存地址是否相等,也就是这两个对象是否就是同一个对象。  

总结: ==判断基本数据类型的值,判断引用数据类型的内存地址。

Equals是定义在Object类的方法,不同类有不同的实现。

用Integer 和 String这两个阐述一下,从而理解Equals方法的设计思想。

Integer的Equals方法通过三步完成比较:内存地址是否相同; 类型是否相同;数值是否相同;(当判断内存地址一致时就不会再判断后面的两项,当内存地址不同才会判断下一项。)

String的Equals方法通过四步完成比较:内存地址是否相同;类型是否相同;长度是否相同;每个字符是否相同;

总结:Equals方法最终目的是比较内容相同。

 

2、java中Integer和int有什么区别?

基本类型与引用类型:int是基本数据类型,直接存储数值,而Integer是对象,它的实例是引用类型,存储的是对象的引用。

默认值:int的默认值为0,而Integer的默认值为null。

操作符支持:对于int类型我们可以使用比较操作符==来比较两个变量的值是否相等,而对于Integer对象,使用==比较得到的是两个Integer对象的引用地址是否相等,比较的是两个对象的地址而非真正的数值。如果要比较Integer对象包含的数值是否相等,需要使用equals()方法。

null安全性:int类型的值始终有明确的默认值0,不存在空值。但是Integer类型的值可以为null,因此在使用Integer类型时,需要对null做特殊处理,否则可能会产生`NullPointerException`。

泛型支持:由于Java泛型的设计限制,Java泛型不能用于基本数据类型。这就意味着我们不能使用ArrayList<int>,但是我们可以使用ArrayList<Integer>。

方法支持:Integer类提供了更多的方法,例如将一个字符串转换成整数、将一个整数转换成不同进制的字符串等。这些方法在int类中并不存在。

 

3、Java的String,StringBuffer,StringBuilder的区别?

 

4、Java的String的intern方法的原理

从字符串常量池中查询当前字符串是否存在(通过equals判断)。

如果存在,返回常量池中的字符串引用。

如果不存在,把这个String对象引用存到常量池,然后返回这个String对象的引用。