首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 字符串高頻面試題 Top 10:從比較到性能優化

     編輯:Java 相關知識

1. 字符串比較:== vs equals()

== 比較引用地址;equals() 比較內容。除非檢查是否為同一對象,否則永遠用 equals()。了解字符串駐留機制(intern())有助於理解 == 有時會返回 true 的情況。

2. 密碼等敏感信息為何用 char[] 而非 String

String 不可變,創建後常駐內存直到 GC,風險大。char[] 可顯式清零(Arrays.fill(chars, '\0')),使用後立即銷毀,減少內存洩露風險。

3. switch 中能否用 String

JDK 7+ 支持。
switch (str.toLowerCase()) { case "a": ... }
JDK 6 及之前不支持,需用 if-else 或枚舉。

4. 字符串轉整數

int n = Integer.parseInt("10"); 簡單高頻,易被忽略。

5. 按空白字符分割字符串

String[] arr = str.split("\\s+"); \\s 匹配空格、制表符、換行等所有空白字符,+ 合併連續空白。

6. substring() 內部機制

JDK 6:返回共享底層 char[] 的新 String(偏移+計數),未創建新數組。大字符串取小子串會阻礙大字符串 GC。
解決:str.substring(m,n) + "" 強制複製。
JDK 7+:substring 直接複製新 char[],無共享問題。

7. String vs StringBuilder vs StringBuffer

  • String 不可變。
  • StringBuilder 可變、非線程安全、性能最佳。
  • StringBuffer 可變、線程安全 (synchronized)、性能稍差。

8. 字符串重複

Python 風格 "ab" * 3 Java 無內置。用 Apache Commons Lang:
String repeated = StringUtils.repeat("abcd", 3); // abcdabcdabcd

9. 字符串轉日期

String str = "Sep 17, 2013";
Date date = new SimpleDateFormat("MMMM d, yy", Locale.ENGLISH).parse(str);
// Tue Sep 17 00:00:00 EDT 2013

注意 SimpleDateFormat 非線程安全,多線程用 ThreadLocal 或 JDK 8 DateTimeFormatter。

10. 統計字符出現次數

Apache Commons Lang:
int n = StringUtils.countMatches("11112222", "1"); // 4

附加題:檢測字符串是否全大寫字母

boolean allUpper = str.matches("[A-Z]+");
// 或
boolean allUpper = str.chars().allMatch(Character::isUpperCase); // JDK 8+

總結表

題號核心知識點關鍵 API / 庫
1引用 vs 內容比較equals()
2敏感數據內存安全char[], Arrays.fill
3Switch 支持版本JDK 7+
4字符串轉基本類型Integer.parseInt
5正則分割空白split("\\s+")
6substring 實現差異JDK 6 共享 / JDK 7+ 複製
7三大構建器選擇單線程 StringBuilder
8重複字符串StringUtils.repeat
9日期解析SimpleDateFormat / DateTimeFormatter
10字符計數StringUtils.countMatches
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved