动/静态语言、强/弱类型语言、编译型/解释形语言的区别

动态类型语言和静态类型语言的区别

  1. 动态语言/动态类型语言

    理解:在编程时不会给变量定义类型,运行期间才会做数据类型的检查,语言会在该变量第一次赋值时判断该值的类型,并将数据类型记录下来。python就是典型的动态类型语言。

  2. 静态语言/静态类型语言

    理解:与动态类型语言恰好相反,在编程中定义变量时就要声明该变量的数据类型,在编译期间检查。C、C++、Java就是典型的静态类型语言。

强类型语言和弱类型语言的区别

  1. 强类型语言/强制数据类型定义语言

    理解:变量定义了数据类型后,如果不经过强转,数据就不能转换为别的数据类型,此语言是数据

    安全的语言。C、C++、Java就是强类型语言

  2. 弱类型语言

    理解:变量可赋不同类型的语言,也就是说此语言常常会隐式转换数据,JavaScript就是弱类型语言

  3. 注意:

    • 强弱类型语言并没有非常明确的定义
    • 因为强类型语言需要对每个变量类型做判断,所以强类型语言在速度上要比弱类型略逊一筹,换言之强类型语言带来的严谨性能够避免在变量类型及赋值上的许多错误。

编译型语言和解释型语言的区别

  1. 前言:计算机不能直接识别高级语言,所有的高级语言都必须翻译成机器语言(二进制机器指令)

  2. 编译型语言

    理解:把语言翻译成机器指令,这个过程只执行一次,所以编译型语言执行效率高,但是不同的平台(系统)的机器指令是不同的,所以编译型语言跨平台性能较差。C、C++就是编译型语言。

  3. 解释型语言

    理解:该语言运行时才逐行翻译成机器指令,而且每运行一次就要翻译一次,所以效率较低。JavaScript就是解释形语言。

  4. 扩展

    ​ Java比较特殊,大致归类为解释型语言,该语言不属于传统的解释型语言也不属于传统的编译型语言,该语言将源代码通过编译器成编译成字节码文件(中间文件/class文件),字节码文件不能被系统直接执行,但是可以被安装在该平台上的Java虚拟机(VM)进行解释执行。换言之,Java源码被编译成字节码文件,该字节码文件被各大平台上的Java虚拟机解释执行,实现了跨平台特性,但是跨平台的前提是平台上必须安装相匹配的Java虚拟机。