【计算机原理交集】浅谈语言的强弱、动静类型

强类型、弱类型

举以下例子

Python与JS

Python:

a = 1
type(a) // 'int'
b = '2'
type(b) // 'str'
a+b // 报错,常识
// 可以强制转换
str(a) + b

JS:

let a = 1
typeof a // 'number'
let b = '2'
typeof b // 'string'
a+b // 为'12'

JS是弱类型,具有隐式的类型转换的特性,Python是强类型,不允许转换。

C++与Java

C++:

int main(){
	int integer1 = 1
	float float1 = 1
	double double1 = 1
	cout << "integer1=" << integer1 << '\n'
	cout << "float1=" << float1 << '\n'
	cout << "double1=" << double1 << '\n'
}

// 编译后执行打印出
integer1=1
float1=1
double1=1

Java:

class TyprConversion {
	int integer1 = 1
	float float1 = 1
	double double1 = 1
	System.out.printIn(integer1)
	System.out.printIn(float1)
	System.out.printIn(double1)
}

//编译后打印
1
1.0
1.0

然后让这两种语言尝试进行隐形转换

C++:

int main(){
	int integer1 = 1.2
	float float1 = 1.23
	double double1 = 1.1
	cout << "integer1=" << integer1 << '\n'
	cout << "float1=" << float1 << '\n'
	cout << "double1=" << double1 << '\n'
}

// 编译报错但仍可打印出
integer1=1 // 被隐性转换了
float1=1.23
double1=1.1

Java:

class TyprConversion {
	int integer1 = 1.2
	float float1 = 1.23
	double double1 = 1.1
	System.out.printIn(integer1)
	System.out.printIn(float1)
	System.out.printIn(double1)
}

//编译报错

所以C++是弱类型,能够自动做隐式转换,而Java是强类型。

个人目前的理解就是如果对隐式的转换宽容度高,就可认为是弱类型,反之。

动静态类型

举个例子

Python:

a = 1
type(a) // 'int'
a =1type(a) // 'str'

动态类型语言:可直接进行类型转换的。编译的时候不知道每个变量的类型,运行时才去检查类型,有错误会报运行错误。

静态类型语言:不可直接进行类型转换,只能强制转换,编写代码的时候要明确变量的数据类型。编译的时候就知道每个变量的类型,编译时类型错误就会报语法错误。

前端对比一下JS和TS的区别就能容易记住这个概念了

尾巴

先看这些例子吧,感觉网上对强弱动静的总结有些不太靠谱,等之后有精力了再去阅书了解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值