返回

Java 字符串初阶面试题精选解析

Android

掌握 Java 字符串面试必备知识,一文带你吃透核心方法和概念

作为 Java 程序员,掌握字符串操作是必备技能。在面试中,字符串相关问题更是常客。本文将深入剖析 Java 字符串初阶面试题,带你全面理解 String 核心方法、StringBuffer 和 StringBuilder 等概念,助你面试一帆风顺。

初探 equals 方法

问题: 以下代码的运行结果是什么?

String str1 = "Hello";
String str2 = new String("Hello");
System.out.println(str1 == str2); // 注释 1
System.out.println(str1.equals(str2)); // 注释 2

解答:

  • 注释 1:false== 比较的是两个对象的引用,而 str1str2 虽然值相同,但指向不同的对象。
  • 注释 2:trueequals 方法比较的是两个对象的实际内容,在 String 类中,equals 实现了字符串内容比较。

要点:

  • == 用于比较引用,equals 用于比较内容。
  • String 源码中,equals 方法首先判断参数是否为 String 类型,若非则返回 false

StringBuffer 与 StringBuilder

问题: 谈谈 StringBuffer 和 StringBuilder 的区别。

解答:

  • 线程安全性: StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的。
  • 效率: StringBuilder 效率更高,因为它不需要在每次操作后同步。
  • 历史原因: StringBuffer 诞生较早,当时 Java 没有提供更好的非线程安全选择。

要点:

  • 在单线程环境下,优先使用 StringBuilder 提高效率。
  • 在多线程环境下,使用 StringBuffer 保证线程安全。

实例化祖先

问题: StringBuffer 的祖先类是什么?

解答:

Object -> Throwable -> Error -> Exception -> RuntimeException -> RuntimeException -> StringIndexOutOfBoundsException -> IndexOutOfBoundsException -> ** StringBuffer

要点:

  • StringBuffer 直接继承自 IndexOutOfBoundsException
  • StringBuffer 和 StringBuilder 同为字符串缓冲区,功能相似,但 StringBuilder 为 StringBuffer 的后继版本,实现了非线程安全。

实例代码示例

在实际开发中,字符串操作是无处不在的。下面是一些常用的字符串操作示例:

// 字符串拼接
String str = "Hello" + " " + "World!";
// 字符串长度
int len = str.length();
// 字符串比较
int cmp = str.compareTo("Hello World!");
// 字符串截取
String substring = str.substring(0, 5); // 取前 5 个字符
// 字符串替换
String replaced = str.replace("World", "Java");

常见问题解答

1. Java 中有哪些常用的字符串处理类?

  • String
  • StringBuilder
  • StringBuffer

2. 什么时候使用 StringBuffer 而不是 String?

当需要频繁修改字符串时,使用 StringBuffer 可以提高效率。

3. StringBuilder 和 StringBuffer 有什么区别?

StringBuilder 是非线程安全的,而 StringBuffer 是线程安全的。

4. 如何比较两个字符串是否相等?

使用 equals 方法比较内容,使用 == 比较引用。

5. 如何将字符串转换为大写/小写?

使用 toUpperCase()toLowerCase() 方法。

总结

掌握 Java 字符串操作知识对于面试成功至关重要。本文深入剖析了常见的字符串面试题,帮助你理解核心方法、概念和示例代码。通过熟练掌握这些知识,你将提升在面试中的表现,为你的职业生涯添砖加瓦。