Java基础面试题
999字约3分钟
2024-06-28
1.String类可以被继承吗?
查看答案解析
String类在声明时使用final关键字修饰,被final关键字修饰的类无法被继承
2.为什么大量字符串拼接的时候需要用StringBuilder,而不用string拼接?
查看答案解析
a.String为字符串常量,而StringBuilder为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的,使用+拼接字符串,实际上都会创建一个新的String对象来存储结果,这会引发较多的内存分配和垃圾回收操作,特别是在循环或大量拼接时,会导致性能显著下降。
b.StringBuilder的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。
**注意:**在某些情况下,现代Java编译器(如Java 8及以上版本)对于使用+连接字符串的代码会自动优化为使用StringBuilder进行拼接
3.==和equals方法的区别?
查看答案解析
a.= =用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,即= =是比较两个基本类型的数据或两个引用变量是否相等
b.equals方法是用于比较两个独立对象的内容是否相同,字符串的比较常用equals方法。 如果一个类没有自己定义equals方法,那么它将继承Object类的equals方法。
c.String、Date、File、包装类等都重写了Object类中的equals()方法。 重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同
4.重载(overload)和重写(override)的区别?重载的方法能否根据返回类型进行区分?
查看答案解析
a.重载发生在一个类中,同名的方法如果有不同的参数列表(类型不同、个数不同、顺序不同)则视为重载。
b.重写发生在子类与父类之间,重写要求子类重写之后的方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求。
方法重载的规则:方法名一致,参数列表中参数的顺序,类型,个数不同。重载与方法的返回值无关
5.抽象类(abstract class)和接口(interface)有什么异同?
查看答案解析
不同点:
● 抽象类中可以定义构造器,接口不能;
● 抽象类可以有抽象方法(抽象类不一定有抽象方法)和具体方法,接口也可以有抽象方法不能有具体方法;
● 接口中的成员全都是 public 的,抽象类中的成员可以使用private、public、protected、默认等修饰;
● 抽象类中可以定义成员变量,接口中只能是常量;
● 有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法;
● 抽象类中可以包含静态方法,接口中不能有静态方法;
● 一个类只能继承一个抽象类,一个类可以实现多个接口;
相同点:
● 不能实例化(不能直接new对象);
● 可以将抽象类和接口类型作为引用类型;
● 一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类;