"面试题.md"
面试题.md 是一个包含了常见面试问题和答案的文档,主要涉及Java编程语言的基础知识和特性。以下是对其中几个关键知识点的详细解释:
1. **String、StringBuffer 和 StringBuilder 的区别**
- `String` 类在Java中是一个不可变对象,由`final`关键字修饰。这意味着一旦创建了`String`对象,就不能更改其内容。如果需要进行字符串拼接,每次操作都会创建新的对象,这在大量拼接操作时可能导致性能下降。
- `StringBuffer` 和 `StringBuilder` 类提供了可变字符串的功能。它们在内部维护一个字符数组,允许在现有字符串上进行修改,而不需要创建新对象。由于 `StringBuffer` 实现了 `ThreadSafe`,它适合在多线程环境中使用,但它的方法调用会有额外的同步开销,所以效率相对较低。而 `StringBuilder` 没有线程安全性,但因其高效,在单线程环境或对性能要求较高的场景下更优。
2. **引用传递和值传递的区别**
- 在Java中,参数传递总是按值传递。对于基本数据类型(如 int, double),传递的是该值的副本。而对于对象引用,传递的是对象引用的副本,这意味着改变副本不会影响原始对象本身。示例中的图片可能展示了一个对象引用传递的例子,展示了在方法内部修改对象属性会影响到原始对象,因为方法接收的是引用的副本,而不是对象的副本。
3. **== 和 equals 的区别**
- `==` 运算符用于比较基本类型的值,或者比较对象的引用是否指向同一个内存位置。如果比较的是两个对象,`==` 检查它们是否是同一个实例。
- `equals()` 方法默认行为也是比较引用,但在很多类(如 `String`)中被重写以比较对象的值。可以自定义 `equals()` 方法以实现特定的比较逻辑。
4. **八大基本数据类型**
- Java的八大基本数据类型包括:`byte`, `short`, `int`, `long`, `float`, `double`, `char`, 和 `boolean`。每个都有其特定的取值范围和存储大小。
5. **Integer 缓冲池**
- Integer 缓冲池是一种优化机制,用于缓存 -128 到 127 之间的 `Integer` 对象。当创建这个范围内的 `Integer` 实例时,会从池中复用已存在的对象,而不是每次都创建新的。在代码示例中,对于大于127的整数,每次都会创建新的 `Integer` 对象,因此 `==` 比较会返回 `false`,而 `equals()` 比较会返回 `true`,因为它们的值相等。
这些知识点是Java程序员面试中常见的问题,理解并掌握它们对于提高编程技能和应对面试至关重要。