强类型、弱类型
举以下例子
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 = ‘1’
type(a) // 'str'
动态类型语言:可直接进行类型转换的。编译的时候不知道每个变量的类型,运行时才去检查类型,有错误会报运行错误。
静态类型语言:不可直接进行类型转换,只能强制转换,编写代码的时候要明确变量的数据类型。编译的时候就知道每个变量的类型,编译时类型错误就会报语法错误。
前端对比一下JS和TS的区别就能容易记住这个概念了
尾巴
先看这些例子吧,感觉网上对强弱动静的总结有些不太靠谱,等之后有精力了再去阅书了解。