第075篇 when 表达式:比 switch 强在哪里
Kotlin 的 `when` 是强大表达式,远超 Java `switch`:支持值、区间、类型、集合、任意条件五种分支;具备智能转换、顺序匹配、穷举检查(对 sealed/enum 编译期报错);作为表达式需覆盖所有路径,慎用空 `else`。核心价值:将分支逻辑结构化、可赋值、可审查。
第061篇 Kotlin 与 Java 的关系:同一 JVM 上的两门语言
Kotlin与Java互操作≠对称兼容!核心差异在混编边界:平台类型致空安全失效、`internal`编译为public、默认参数需`@JvmOverloads`、data class字段private final使Gson反序列化失配。真功夫在收尾——注解规范、ProGuard保留元数据、协程作用域管控。
第058篇 单例模式六种写法:线程安全与懒加载的平衡
单例模式是面试高频考点,六种写法各具特点:饿汉式线程安全但非懒加载;懒汉式需同步;DCL需`volatile`防重排;静态内部类最推荐(JVM类初始化锁保障懒加载与线程安全);枚举天然防反射与序列化。Android中优先用静态内部类,持Context时务必用`getApplicationContext()`,避免内存泄漏。
第073篇 字符串模板与原生字符串:多行文本的正确姿势
Kotlin字符串模板核心三点:①编译后转为`StringBuilder.append`链(全常量时优化为字面量);②原生字符串`"""..."""`保留缩进,必须用`trimIndent()`或`trimMargin()`清理;③Android中禁在循环内用模板拼接,否则触发O(n²)性能坑。安全上,模板不用于SQL/URL等需解析的场景。
第069篇 object 与 companion object:Kotlin 里的单例
本文深入剖析 `object` 与 `companion object` 的本质差异:二者虽均为单例,但字节码结构、初始化时机及 Java 可见性截然不同。`object` 编译为私有静态实例(饿汉式),而 `companion object` 是宿主类内的静态 `Companion` 实例,其初始化绑定类加载。`@JvmStatic` 和 `@JvmField` 不提升性能,而是改变 Java 调用形态与反射可见性。核心警示:慎用 `object` 持有可变状态,伴生对象避免耗时初始化——正确选型应基于作用域需求,而非便利性。
第072篇 中缀表达式与运算符重载:可读性的双刃剑
Kotlin运算符重载比Java更彻底:不仅支持`+ - * /`等映射为`plus`/`minus`等约定函数,还允许任意单参函数通过`infix`声明实现中缀调用(如`a to b`)。核心原则是——符号语义必须与原始含义一致(`+`即相加,`-`即取反或相减),滥用将损害可读性。
第049篇 JVM 调优入门:从 OOM 日志倒推问题
JVM调优核心是方法论而非参数背诵:先分类(堆/元空间/直接内存/栈OOM)、再取证(GC日志/内存快照/线程栈)、接着定性(泄漏 or 配置不足)、最后动参。顺序错则掩盖问题,盲目调大堆只会延迟OOM。Android需额外关注堆分区、largeHeap及meminfo诊断。
第077篇 集合操作符链:filter、map 与 fold
本文深入剖析 Kotlin 集合操作符(`map`/`filter`/`flatMap`/`groupBy`)的**真实性能成本**:每次调用均创建新集合、遍历全量数据。重点揭示“何时不该用”——如十万级数据链式调用致内存暴增、GC 频繁、UI 卡顿;详解三大优化路径:①调整顺序(`filter`前置)、②惰性化(`asSequence`)、③削平链路(`mapNotNull`/`for`),并明确选型依据。
第062篇 val 与 var:不可变优先的工程哲学
`val` 与 `var` 是 Kotlin 不可变性设计的基石:`val` 仅保证**引用不可重绑定**,不约束对象内部状态(如 `val list = mutableListOf()` 仍可 `add`);`var` 允许引用变更。真正安全需结合只读类型(`List`)、`toList()` 拷贝、不可变数据类及并发原语——默认用 `val`,变则审慎用 `var`。