【强类型、弱类型】、【静态、动态】、【静态类型、动态类型】语言之间的区别

本文深入探讨了编程语言的特性,包括强类型与弱类型、静态与动态语言的区别,以及静态类型与动态类型语言的特点。通过对比Python、Java、C语言等,详细解释了这些概念及其在实际编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

强类型语言

强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了,也就是说语言内部不允许隐式的类型转换。所以也无法处理两种不同类型相加的情况,比如说让Python运行下面代码会报错一样:

a=10
b='abcd'
print(a+b)

其实在定义变量时,python虽然没有像c语言或者java一样提前定义好数据类型,但是python会默认10是int类型,1.11是float类型,'abcd’是str类型,实际上是python在背后做了变量的类型规定,在执行期间不会做隐式类型转换,所以Python是一门强类型的语言。

弱类型语言

数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。比如使用vbscript执行以下代码:

var result=5+5; //two numbers
alert(result);  //outputs "10"
var result=5+'5'; // a number and a string
alert(result);  //outputs "55"

上述代码在vbscript里面并不会出错,反而会把5+'5'计算成55。所以在使用弱类型语言的时候要格外小心数据类型出错。所以可以看到vbscript是弱类型语言。

静态语言

与动态语言相对应的,运行时结构不可变的语言就是静态语言。如Java、C、C++、C#。比如说C语言里面的结构体,不可能在运行阶段加入新的属性。而Python的对象就可以,具体看下面C语言例子:

#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

struct Student{
    char name[10];
    char id[20];
    int age;
};

int main()
{
    struct Student carson;
    cin>>carson.name>>carson.id>>carson.age;

    cout<<carson.name<<"\n";
    cout<<carson.id<<"\n";
    cout<<carson.age<<"\n";
    
	//编译下面这句的时候会报错
    //char carson.class_=4
    //cout<<carson.class_<<"\n";
    return 0;
}

char carson.class_=4这句编译会报错,而且CodeBlocks报错的信息也很有意思:
在这里插入图片描述
编译器发现不能通过静态语言测试,说明C语言只允许静态语言的语法。

动态语言

动态语言是一类在运行时可以改变其结构的语言,例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。比如以下Python程序:

class Dynamic():
	def __init__(self,name,sex):
		self.name=name
		self.sex=sex

if __name__=="__main__":
	a=Dynamic("carson","male")
	a.age=19
	print(a.name)
	print(a.sex)
	print(a.age)

输出:

carson
male
19

可以看到Python可以在对象中动态添加新的属性,而C语言的结构体不能这样做,所以Python是动态语言,C语言是静态语言。

静态类型语言

静态类型语言的数据类型是在编译期进行检查的,也就是说变量在使用前要声明变量的数据类型,这样的好处是把类型检查放在编译期,提前检查可能出现的类型错误,典型代表C/C++和Java。

动态类型语言

动态类型语言在运行期进行类型检查的语言,也就是在编写代码的时候可以不指定变量的数据类型,比如Python和Ruby。

结论

所以经过分析我们大致上可以这样判断:
Python属于强类型语言、动态语言、动态类型语言。
Java属于强类型语言、静态语言、静态类型语言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值