共计 1749 个字符,预计需要花费 5 分钟才能阅读完成。
Java 技能精要:新手开发者必须掌握的 10 个核心实践
开篇:3 个让 Java 新手怀疑人生的典型错误
刚接触 Java 时,我们都踩过一些看似简单却影响深远的坑。以下是三个最具代表性的案例:

- String 拼接的性能灾难
- 反模式示例:
String result = ""; for (int i = 0; i < 10000; i++) {result += i; // 每次循环都创建新 String 对象} -
原理:每次
+=操作都会生成新 String 对象(O(n²)时间复杂度) -
equals 与 == 的混淆
- 反模式示例:
String s1 = new String("hello"); String s2 = new String("hello"); if (s1 == s2) { // 错误!比较的是内存地址 System.out.println("Equal"); } -
原理:
==比较对象引用,equals()比较内容(《Effective Java》第 10 条) -
ArrayList 遍历时删除元素
- 反模式示例:
List<Integer> list = new ArrayList<>(Arrays.asList(1,2,3)); for (Integer num : list) {if (num == 2) list.remove(num); // 抛出 ConcurrentModificationException } - 原理:增强 for 循环使用迭代器,快速失败(fail-fast)机制触发
技能 1:字符串处理优化
问题场景
频繁拼接字符串时(如生成 SQL 语句),直接使用 + 会导致性能急剧下降。
底层原理
- String 是不可变类,每次修改都创建新对象
- 编译器对
+优化有限(仅编译期常量会优化)
最佳实践
// 使用 StringBuilder(非线程安全)StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {sb.append(i); // 底层使用可扩容 char 数组
}
String result = sb.toString();
⚠️ 反模式
// 每次循环都 new StringBuilder(比直接 += 更差)String result = "";
for (int i = 0; i < 10000; i++) {result = new StringBuilder(result).append(i).toString();}
技能 2:集合框架选型
ArrayList vs LinkedList 性能对比(JMH 测试)
| 操作 | ArrayList (ns/op) | LinkedList (ns/op) |
|---|---|---|
| 随机访问 | 15.7 | 3872.4 |
| 头部插入 | 892.1 | 12.5 |
| 迭代遍历 | 18.3 | 21.7 |
最佳实践
// 随机访问多的场景
List<Integer> arrayList = new ArrayList<>();
arrayList.get(100); // O(1)
// 频繁插入删除的场景
List<Integer> linkedList = new LinkedList<>();
linkedList.addFirst(1); // O(1)
技能 3:线程安全实现
三种方式对比
- synchronized
synchronized(map) {map.put(key, value); } - 优点:简单直接
-
缺点:粒度粗时性能差
-
ConcurrentHashMap
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>(); map.put(key, value); // 分段锁技术 -
适合高并发写场景
-
CopyOnWriteArrayList
List<String> list = new CopyOnWriteArrayList<>(); list.add("item"); // 写时复制 - 适合读多写少场景
自测练习
- 以下哪种操作是惰性求值?
a) list.stream().filter(x -> x > 0).count() b) list.stream().filter(x -> x > 0).findFirst()答案:b(终止操作触发计算)
进阶路线
- JVM:GC 调优、字节码增强
- 框架:Spring IOC/AOP 原理
- 并发:JUC 包深度解析
掌握这些核心技能后,你会发现 Java 代码质量明显提升。记得在实际项目中刻意练习,遇到问题多翻 JDK 源码(按住 Ctrl 点进去看)——这是最快的学习路径。
正文完
