简单地区分编程语言的动静态类型与强弱类型

陪她去流浪 桃子 2018年12月15日 编辑 阅读次数:2043

动态、静态类型

动态与静态:在编译的时候就能清楚地知道一个变量的类型。

如果一个语言的变量的类型能在运行时动态地改变,那么它是动态语言。否则是静态语言。

强、弱类型

强、弱类型:是否允许隐式的类型转换。

如果一个语言的表达式在求值时不允许操作数类型的自动转换,那么它是强类型。否则是弱类型。

举例

Javascript 是动态、弱类型语言

弱类型举例:自动将数值转换成字符串

> 1+"2"
< "12"

动态类型举例:变量可以在运行时改变类型

1
2
3
4
5
6
> var a;
> undefined
> a = 1;
< 1
> a = "a";
< "a"

Go 是静态、强类型语言

强类型举例:字符串不会转换成数值再相加

1
2
3
> 1 + "2"
< cannot convert "2" (type untyped string) to type int
< invalid operation: 1 + "2" (mismatched types int and string)

静态类型举例:变量类型在定义时就确定下来

1
2
3
> var a string
> a = 1
< cannot use 1 (type int) as type string in assignment

一些常见语言的类型划分图

quadrant.png

图片来源:弱类型、强类型、动态类型、静态类型语言的区别是什么? - 吴亦凡的回答 - 知乎

参考