java 面试指南
本文收录了一些 java 高频面试知识点
面向过程 VS 面向对象#
前者性能比后者高,因类调用时需要实例化,开销比较大耗资源,是故单片机,嵌入式开发等一般采用面向过程开发。
面向对象有封装,继承,多态的特性,可以设计出低耦合,易维护,易复用的系统。
java 最终的执行代码并不是可以直接被 CPU 执行的二进制机械码
重载(overload) vs 重写(override)#
Constructor 不能被 重写,但是可以重载
区别点 | 重载方法 | 重写方法 |
---|---|---|
发生范围 | 同一个类 | 子类 中 |
参数列表 | 必须修改 | 一定不能修改 |
返回类型 | 可修改 | 一定不能修改 |
异常 | 可修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
访问修饰符 | 可修改 | 一定不能做更严格的限制(可以降低限制) |
发生阶段 | 编译期 | 运行期 |
String VS StringBuffer VS StringBuilder#
String 类中使用 final 关键字修饰字符数组来保存字符串,String 对象是不可变。
StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。
StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。
StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类
- 操作少量的数据:适用 String
- 单线程操作字符串缓冲区下操作大量数据:适用 StringBuilder
- 多线程操作字符串缓冲区下操作大量数据:适用 StringBuffer
构造方法特性#
- 名字与类名相同。
- 没有返回值,但不能用 void 声明构造函数。
- 生成类的对象时自动执行,无需调用。
== vs equals#
基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址
== : 它的作用是判断两个对象的地址是不是相等
- String 中的 equals 方法是被重写过,因为 object 的 equals 方法是比较的对象的内存地址,而 String 的 equals 方法比较的是对象的值。
- 当创建 String 类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重新创建一个 String 对象。
hashCode() vs equals()#
- 如果两个对象相等,则 hashcode 一定也是相同的
- 两个对象相等,对两个对象分别调用 equals 方法都返回 true
- 两个对象有相同的 hashcode 值,它们也不一定是相等的
- 因此,equals 方法被覆盖过,则 hashCode 方法也必须被覆盖
- hashCode () 的默认行为是对堆上的对象产生独特值。如果没有重写 hashCode (),则该 class 的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: