语言区别
动态类型语言和静态类型语言的区别
-
动态语言/动态类型语言
运行时才能确定数据类型的语言,变量使用之前不需要事先声明变量类型。(在编程时不会给变量定义类型,运行期间才会做数据类型的检查,语言会在该变量第一次赋值时判断该值的类型,并将数据类型记录下来。python,php就是典型的动态类型语言。)
//php语言中 var i=0; var str="string";
//python语言中,var都省略了 i=0; str="string";
-
静态语言/静态类型语言
理解:与动态类型语言恰好相反,在编程中定义变量时就要声明该变量的数据类型,在编译期间检查。C、C++、Java就是典型的静态类型语言。(先声明变量类型,后使用变量)
//在java语言中 int i;//声明 i=0;//赋值or使用
强类型语言和弱类型语言的区别
-
强类型语言/强制数据类型定义语言
变量定义了数据类型后,如果不经过强转,数据就不能转换为别的数据类型,此语言是数据安全的语言。C、C++、Java就是强类型语言。(一个数据类型需要强制转换成另一个数据类型才能使用)
/** *大范围往小范围转化需要用到强制转换,转换后的值会有所损失。 *不同数据类型精度由小到大排列如下: *char-->byte --> short --> int --> long --> float --> double *强制类型转换格式:数据类型 变量名 = (数据类型)被转数据值; **/ double x=3.1415926; int y=(int)x;
-
弱类型语言
变量可赋不同类型的语言,也就是说此语言常常会隐式转换数据,JavaScript,php就是弱类型语言
var A=5; var B="5" sA=A+B;//sA=55,系统默认+字符连接符,将A转化为字符串类型; sB=A-B;//sB=0;系统认为-是算数运算符,从而将B转化为int类型,所以sum为5-5=0;
-
注意:
- 强弱类型语言并没有非常明确的定义
- 因为强类型语言需要对每个变量类型做判断,所以强类型语言在速度上要比弱类型略逊一筹,换言之强类型语言带来的严谨性能够避免在变量类型及赋值上的许多错误。
编译型语言和解释型语言的区别
计算机不能直接识别高级语言,所有的高级语言都必须翻译成机器语言(二进制机器指令)
-
编译型语言
把语言翻译成机器指令,这个过程只执行一次,所以编译型语言执行效率高,但是不同的平台(系统)的机器指令是不同的,所以编译型语言跨平台性能较差。C、C++就是编译型语言。
-
解释型语言
该语言运行时才逐行翻译成机器指令,而且每运行一次就要翻译一次,所以效率较低。JavaScript就是解释形语言。
-
扩展
Java比较特殊,大致归类为解释型语言,该语言不属于传统的解释型语言也不属于传统的编译型语言,该语言将源代码通过编译器成编译成字节码文件(中间文件/class文件),字节码文件不能被系统直接执行,但是可以被安装在该平台上的Java虚拟机(JVM)进行解释执行。换言之,Java源码被编译成字节码文件,该字节码文件被各大平台上的Java虚拟机解释执行,实现了跨平台特性,但是跨平台的前提是平台上必须安装相匹配的Java虚拟机。