日记:2026/08/26

·2 min read·

一张卡片理清 Java 静态类型 vs JS 动态类型、转译/编译/JIT 的区别

今天看了张技术学习卡片,把类型系统和源码到运行的路径理得很清楚,记录一下:

类型本质 · 转换路径 · 认知纠偏:Java vs JavaScript

1. 静态类型(Java)VS 动态类型(JS)

  • Java:像「固定的盒子」——变量有类型,编译期检查,类型固定,安全可预测
  • JS:像「可变的标签」——运行时绑定类型,类型可变,灵活但需谨慎
int age = 32;
age = "hello"; // ❌ 编译错误
let age = 32;
age = "hello"; // ✅ 合法

2. 转译 VS 编译 VS JIT

路径用途工具/引擎
转译语法降级,兼容旧环境Babel / TypeScript
编译生成字节码,平台级产物javac → .class
JIT运行时即时编译热点代码V8 引擎 → 机器码

3. 最容易被误解的几点(对前端尤其重要)

  • "JS 也有类型所以是静态类型" → 错,JS 类型运行时绑定
  • "Babel 会做类型检查" → 错,Babel 只转译语法,类型检查要靠 TS 工具
  • "Java 代码直接被 JVM 执行" → 错,JVM 执行字节码
  • "JS 是纯解释执行" → 错,V8 在运行时把热点代码编译成机器码

一句话总结:转译降语法,编译产字节码,运行时再即时编译,最终机器码执行。动态和静态各有优缺,按场景选择。

Twitter