想象一下:你是一名 Java 开发者,在一家不错的科技公司工作,项目有趣,一切顺利——然后在团队会议上,CTO 宣布:我们要把后端迁移到 Kotlin。
大多数人的第一反应:"什么?为什么?Java 不是用得好好的吗?"

第二反应——你打开搜索引擎开始研究。然后发现,从 CTO 那里听到这番话的人,你并不是第一个。Kotlin 已经势头强劲好几年了,越来越多的团队做出了同样的选择。
那我们来好好聊聊:Kotlin 是什么,它从哪里来,既然 Java 已经能用,为什么还要学它?不搞布道,不喊"Java 死了!"——它没死,活得好着呢。
谁创造了 Kotlin,为什么
Kotlin 由 JetBrains 开发——就是做 IntelliJ IDEA 的那家公司。也就是大多数 Java 开发者每天工作时用的那个 IDE。
他们在开发 IDEA 的过程中,自己就深陷 Java 的泥沼多年:无穷无尽的 boilerplate、生产环境的 NullPointerException、两行能搞定的事非得写二十行。开发者是有耐心的人——但耐心终究有个限度。
与此同时,其他语言——Scala、Groovy、Swift、C#——早就提供了 Java 所缺少的东西:null-safety、一行搞定的 data class、extension functions、简洁的 lambda。这些在别的语言里都有。就是 Java 没有。
在某个时刻,JetBrains 做出了决定:不受这个苦了。他们汇集了别人已有的最佳想法,加上自己的创新——创造出一门运行在同一 JVM 上、使用同一套库、又不强迫 Java 开发者从零开始的语言。
2016 年,Kotlin 就这样诞生了。对了,这个名字和猫没关系。Kotlin 是芬兰湾里的一座岛屿。Java 的名字来自爪哇岛——有咖啡。Kotlin 的名字来自科特林岛——没有咖啡,但有扎实的类型系统。
为什么 Google 支持 Kotlin——以及 Oracle 与此有何关系
2017 年,Google 宣布 Kotlin 为 Android 的官方语言。
官方理由——开发者有需求,而且这门语言更安全、更方便。这是真的。
但背后还有一段值得了解的故事。
从 2010 年开始,Google 就陷入了与 Oracle 关于 Android 中 Java API 使用权的诉讼。Oracle 在收购 Sun Microsystems 以及 Java 之后,立刻提起诉讼,声称 Google 未经授权使用了 37 个 Java API。索赔金额:88 亿美元。这个案子一直打到了美国最高法院,直到 2021 年才以 Google 胜诉告终。

十一年,悬在数十亿美元诉讼的阴影之下。做个参照:88 亿美元大约够雇用 88,000 名优秀的高级开发者工作一年。或者是一个完全不合理的咖啡数量。
JetBrains 的 Kotlin 是开源的,没有任何许可证风险,与 Java 生态系统完全兼容。Google 从未官方承认这一决定与诉讼有关。但逻辑不言自明。
这一切还有个意外的好处:竞争迫使 Oracle 更积极地推进 Java 的发展。新版本中的 Records、sealed classes、pattern matching——部分原因就是要跟上 Kotlin 的步伐。结果是,所有 JVM 开发者都从中受益。
Java 仍是后端的基石——这一点很重要
这里容易搞混,所以直说吧。
Java 哪儿也不去。Spring、Hibernate、大多数企业里庞大的代码库——这一切都在运转,还会继续运转很长时间。从职位数量、生态系统规模和成熟度来看,Java 仍然是行业标准。
Kotlin 在它旁边生长。越来越多的团队用 Kotlin 编写新服务,同时保持原有的 Java 代码不动。根据 JetBrains 开发者调查 2024,Kotlin 跻身全球使用最广泛的 15 种语言之列。
就像锤子和电钻。没有人向锤子宣战。只是有些活儿用电钻更顺手。
Kotlin 与 Java 的具体区别
不说理论——直接看代码。
Null-safety。Java 最大的痛点之一是 NullPointerException。它不打招呼,不道歉,直接在运行时崩溃——通常是在生产环境,最好是周五晚上。
// Java — 看起来没问题,直到它崩了
String name = null;
System.out.println(name.length()); // NPE。周末快乐。
// Kotlin — 根本不会编译
val name: String = null // 编译错误
val name: String? = null // 明确声明可为 null — 现在没问题
println(name?.length) // 如果是 null — 返回 null,不会崩
println(name?.length ?: 0) // 如果是 null — 返回 0Kotlin 的编译器知道哪里可能出现 null,在你处理它之前不会放行代码。就像一个严格的 tech lead——但没有那些没完没了的消息轰炸。
Data class。经典任务——一个有三个字段的数据模型。
// Java:构造函数、getter、equals、hashCode、toString
// 合计:大约半页没人读的代码
public class User {
private String name;
private int age;
...
}
// Kotlin — 一行搞定
data class User(val name: String, val age: Int)Kotlin 会自动生成其余所有内容,包括 copy()——一个用于创建修改了字段的副本的方法。Java 没有这个开箱即用的功能。为什么?好问题。
Extension functions。无需继承,直接给任何类添加方法:
fun String.isPalindrome() = this == this.reversed()
println("racecar".isPalindrome()) // true协程(Coroutines)。异步代码读起来像同步代码。没有回调,没有乱成一团的 CompletableFuture 链,没有眼泪。
suspend fun loadData(id: Int) {
val user = fetchUser(id) // 等待,但不阻塞线程
val orders = fetchOrders(user)
display(user, orders)
}
现在应该学 Kotlin 吗
如果你做 Android 开发——这个问题根本不用问。Kotlin 在那里已经是标准了。
如果你是 Java 后端开发者——取决于你现在的处境和想去的方向。在大型企业的遗留项目里,Kotlin 目前还不是硬性要求。但如果你着眼于产品型公司、初创企业或国际市场,Kotlin 出现在招聘要求里的概率每年都在增加。
好消息是:对于 Java 开发者来说,迁移需要几周,而不是几个月。同一套 JVM,同样的逻辑。IntelliJ IDEA 你已经装了。剩下的就是动手开始。
有个故事:一个人的房子被洪水淹了,他祈求帮助,上帝先后派来了卡车、船和直升机,他却一次次拒绝,等着真正的奇迹。别做那种人。这就是你的信号。
现在就来试试
我们有一门 Kotlin 课程。62 个关卡,1100 多道题目含自动验证,3 个真实项目可以加入作品集。和 Java 课程一样的游戏化机制:只有代码、任务和即时反馈——没有对着空气的单向讲课。
第一关免费。
继续阅读
如果你想直接上手实践,或者更深入地比较两门语言——这里有两篇文章可以接着看:
- Kotlin 从零开始:入门教程 — 直接在浏览器里写第一段能运行的代码,无需安装任何东西。涵盖 null-safety、data class 和 extension functions 的实战示例。
- Java vs Kotlin:诚实的比较 — Java 客观胜出的地方,Kotlin 更顺手的地方,以及为什么其实根本不需要二选一。
GO TO FULL VERSION