本文系統整理 Java 基礎 API 核心知識點:Javadoc 文檔註釋規範、String 不可變機制與常量池復用、長度/查找/截取/去空格/字符訪問/大小寫轉換/valueOf 等高頻方法實戰、StringBuilder 可變字符序列的增刪改查與性能對比,附大量代碼示例與圖解。
文檔註釋可用於類、字段、方法,經 javadoc 命令生成 API 手冊。標準標籤:
/**
* 類說明
* @author 作者
* @version 版本號
* @see 參考類
* @since 起始版本
*/
public class Demo {
/** 常量說明 */
public static final String INFO = "Hello";
/**
* 方法說明
* @param name 參數說明
* @return 返回值說明
*/
public static String sayHello(String name) { return INFO + name; }
}
String s = "abc" 會檢查字符串常量池,已存在則返回引用,否則創建並入池。new String("abc") 強制在堆中創建新對象。"ab" + "cd" 編譯期直接合併為 "abcd",故復用常量池對象;但 String s = "ab"; s + "cd" 運行期創建新對象。String s1 = "fury123";
String s2 = "fury123"; // true (常量池復用)
String s3 = new String("fury123"); // false (堆新對象)
String s4 = "fury" + "123"; // true (編譯期優化)
String s5 = "fury"; s5 + "123"; // false (運行期 new StringBuilder)
| 方法 | 說明 | 示例 |
|---|---|---|
| length() | 字符數(中英文均計 1) | "你好Java".length() == 6 |
| indexOf(str[, fromIndex]) | 首次出現索引,無則 -1 | "thinking in java".indexOf("java") == 12 |
| lastIndexOf(str) | 最後一次出現索引 | "ababa".lastIndexOf("aba") == 2 |
| substring(begin, end) | 截取 [begin, end),含頭不含尾 | "www.oracle.com".substring(4,10) == "oracle" |
| trim() | 去除首尾空白字符(≤空格),改變內容則新對象 | " abc ".trim() == "abc" |
| charAt(index) | 獲取指定位置字符 | "Java".charAt(2) == 'v' |
| startsWith/endsWith | 前綴/後綴判斷 | "test.jpg".endsWith(".jpg") == true |
| toUpperCase/toLowerCase | 大小寫轉換,僅影響字母 | "AbC".toLowerCase() == "abc" |
| valueOf(obj) | 靜態方法,任意類型轉字符串,""+x 效果同但較慢 | String.valueOf(123) == "123" |
String url = "https://www.example.com/path";
int firstDot = url.indexOf(".");
int secondDot = url.indexOf(".", firstDot + 1);
String domain = url.substring(firstDot + 1, secondDot); // "example"
public static boolean isPalindrome(String s) {
for (int i = 0, j = s.length() - 1; i < j; i++, j--) {
if (s.charAt(i) != s.charAt(j)) return false;
}
return true;
}
if (input.toLowerCase().equals("f1w3")) { /* 通過 */ }
內部維護可擴容字符數組,避免頻繁創建 String 對象。核心方法:
append(x):追加任意類型(自動 valueOf)delete(start, end):刪除區間replace(start, end, str):替換區間insert(offset, x):插入reverse():反轉(回文判斷神器)toString():轉為 String// 1000 萬次拼接
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10_000_000; i++) sb.append("a"); // ~幾十毫秒
String s = "a";
for (int i = 0; i < 10_000_000; i++) s += "a"; // ~數分鐘,產生海量臨時對象觸發頻繁 GC
StringBuilder sb = new StringBuilder();
for (char c = '\u4E00', i = 1; c <= '\u9FA5'; c++, i++) {
sb.append(c);
if (i % 50 == 0) sb.append('\n');
}
System.out.println(sb.toString());
熟練掌握 String 與 StringBuilder 的特性邊界,是寫出高性能、低內存佔用 Java 代碼的基礎功力。