直接回答:静态类型(Java、Go、Rust)在编译期检查类型,动态类型(Python、JavaScript)把类型检查推迟到运行时。前者用灵活性换取安全与性能,后者用安全冗余换取开发速度与表达力。
展开解析:
- 静态类型优势:类型错误在编译期暴露,不用等上线;IDE 能做精准的跳转、补全和安全重构;编译器可依类型信息做优化,性能更好;大型团队协作时类型签名本身就是文档。代价是代码更啰嗦、泛型等机制学习成本高、快速原型时碍手碍脚。
- 动态类型优势:写起来快,鸭子类型天然支持多态,适合脚本、原型和胶水代码;元编程灵活。代价是类型错误可能潜伏到运行时才炸,代码量大了之后重构风险高、维护依赖测试覆盖,解释执行也慢。
趋势是互相靠拢:Python 有 type hints + mypy/pyright 的渐进式类型,TypeScript 给 JavaScript 加上静态层;反过来 Java、C# 引入 var 局部类型推断减少噪音。实践上,小脚本动态类型效率更高,长期演进的大项目建议上类型标注。追问:鸭子类型与结构化类型的关系、渐进式类型的局限。