文章归档
沿着时间,重读写下的痕迹。
-
try-catch-finally 执行顺序
钩子:一道题,测出你的水平 static int test() { try { return 1; } finally { return 2; } } 调用 test() 返回几?先把答案默念一遍,再看下去——这道题在面试里筛掉过无数人。 核
-
自动装箱:== 引发的事故
钩子:一行代码,测出你的 Java 底子 Integer a = 127; Integer b = 127; System.out.println(a == b); // true Integer c = 128; Integer d = 128; System.out.println(c
-
遍历集合的 4 种姿势
钩子:删个元素而已,怎么就炸了 购物车里 5 件商品,要删掉已下架的那件。你的直觉写法: for (String goods : cart) { if (goods.equals("已下架商品")) { cart.remove(goods); // 运行时炸:Concu
-
HashMap 的 key 能重复吗
钩子:从名单到键值对 存全班学生名单,ArrayList 够用。但问题变成"输入学号,立刻查出姓名"呢? 用 List 的笨办法:遍历全表,一个一个比学号。1000 个学生平均要比 500 次——数据到 100 万呢? 人类的直觉早就给出了更好的结构:学号 → 姓名,一对一映射,报出学号直接翻到那行
-
ArrayList与LinkedList
钩子:数组的两大痛点 第 12 篇学过数组,用久了你会发现两个难受的地方: 长度定死:new int[10] 就是 10 个,装满了不能扩,装太少浪费; 插入麻烦:想在中间插一个元素?后面所有元素手动后移,代码写得手酸。 Java 的答案:集合(Collection)——会自动扩容、自带增删方法的"
-
== 和 equals() 的区别
钩子:看着一样,== 却说 false String s1 = "橙码酱"; String s2 = new String("橙码酱"); System.out.println(s1 == s2); // false ! System.out.println(s1.equals(s2
-
String 为什么不可变
钩子:一段把程序拖慢的代码 先做个实验,循环拼接字符串一万次: String s = ""; for (int i = 0; i < 10000; i++) { s = s + "a"; // 拼接 } 这段代码能跑,但和用 StringBuilder 的版本比,实测慢了近百倍
-
接口vs抽象类
钩子:两个真实场景 场景一:写"动物"体系,每个动物都必须会 makeSound()——但"动物"这个类根本不该被 new 出来(你见过"一只动物"吗?)。我们需要一个不能实例化、只用来立规矩的类:抽象类。 场景二:要让订单能排序、能比较大小。但 Comparable 的规矩和"继承谁"无关——订单
-
多态
钩子:一行代码,一个谜 Person p = new Student(); // 左边是 Person,右边 new 的是 Student p.introduce(); 问题来了:p 的类型是 Person,但它在内存里指向的是一个 Student 对象。p.introduce() 到底执行哪
-
继承
钩子:两段几乎一样的代码 上篇封装完的 Student,现在新来一个 Employee 类: class Employee { private String name; // 和 Student 一模一样 private int age; // 和 Stude