基础数据类型
| 类型/语言 | JavaScript | Java | Python | C | C++ |
|---|---|---|---|---|---|
| 整数类型 | number(64位双精度浮点数,统一整数和浮点)1 |
byte(8位,-128~127)、short(16位)、int(32位)、long(64位) |
int(动态精度,理论无限大) |
short(16位)、int(32位)、long(32/64位)、long long(64位) |
同 C,新增固定宽度类型(如 int32_t、int64_t)1,3 |
| 浮点数类型 | number(64位双精度)1 |
float(32位)、double(64位) |
float(64位双精度) |
float(32位)、double(64位)、long double(80/128位) |
同 C,支持 long double(更高精度,80/128位)3,5 |
| 字符类型 | 无独立类型,用 string 表示 |
char(16位 Unicode) |
无独立类型,用长度为1的 str 表示 |
char(8位,-128~127) |
char(同 C),新增 wchar_t(宽字符,16/32位)1,3 |
| 布尔类型 | boolean(true/false) |
boolean(逻辑值,JVM 依赖) |
Bpytool(继承自 int,True=1,False=0) |
_Bool(C99+,0/1)4 |
bool(true/false,1字节)1,2 |
| 空值表示 | null、undefined |
原始类型无空值(引用类型默认 null, null 不能直接赋值给基本类型(如 int、boolean),否则会导致编译错误) |
None(NoneType 数据类型的唯一值) |
NULL(空指针宏)2 |
nullptr(类型安全空指针,C++11+)2,5 |
| 大整数支持 | BigInt(ES2020+,后缀 n,支持任意精度整数) | 无原生支持,需通过 BigInteger 类 | 原生 int 支持任意精度,无需特殊类型 | ||
| 特殊类型 | Symbol(唯一标识符) |
无 | 无 | 指针(*)、联合体(union)、枚举(enum)4 |
引用(&)、类(class)、模板(泛型)2,5 |
| 类型转换规则 | 隐式转换频繁(如 "5" + 2 = "52") |
严格类型检查,窄化需显式强制转换 | 隐式转换仅限数字,其他需显式转换 | 隐式转换宽松(如 int 转 float),强制转换用 (type)4 |
支持显式转换(static_cast、reinterpret_cast 等)5 |
| 内存管理 | 自动垃圾回收 | 自动垃圾回收(对象堆分配) | 自动垃圾回收 | malloc/free(手动)4 |
new/delete(面向对象),兼容 C 风格5 |
| 类型系统特性 | 动态弱类型 | 静态强类型 | 动态强类型 | 弱类型(无编译时检查)4 | 强类型(支持编译时检查,引入 const 和类型转换操作符)1,5 |
关键差异总结
- 整数与浮点数
- C/C++:明确区分位宽(如 short、long),C++扩展 long long58。
- Java:严格固定位宽(如 int=32位)。
- Python/JS:动态类型,无固定位宽限制。
-
布尔类型
C:依赖C99的 _Bool,本质是整数0/19。
C++:原生 bool,逻辑更清晰6。
Python:bool 是 int 的子类,兼容1/0。 -
空值与指针
C:NULL 是宏定义的 (void*)0,易引发类型问题。
C++:nullptr 类型安全,避免歧义。
Java:原始类型无空值,引用类型默认 null。Java 的 null 是引用类型变量的“无值”状态,需通过判空和规范使用避免 NullPointerException。理解其特性(如类型限制、默认值规则)是编写健壮代码的基础,而与其他语言的对比则体现了 Java 在类型安全上的设计取舍。
JavaScript 有 null 和 undefined
Python 用 None语言 空值表示 特性 Java null 仅用于引用类型,强制类型安全,需显式判空。 Python None 类似 null,但所有变量均为对象,无基本类型限制。 C++ NULL 宏定义为 0 或 nullptr(C++11+),用于指针类型。 -
类型安全与转换
C/C++:C允许隐式危险转换,C++引入显式转换操作符增强安全性。
Java:编译时严格检查,避免隐式窄化转换。 -
内存管理
C/C++:手动管理(malloc/new),C++支持RAII和智能指针。
其他语言:自动垃圾回收,减少内存泄漏风险。 -
类型系统:
JavaScript:动态弱类型,仅 number 统一表示数字78。
Java:静态强类型,8种原始类型均有固定位数和范围1011。
Python:动态强类型,基本类型为对象,但 int 支持无限精度1213。 -
数值精度:
JavaScript 和 Python 的浮点数均为64位双精度,但 Java 提供单/双精度选项71012。
大整数支持:JavaScript 需 BigInt,Java 依赖类库,Python 原生支持81012。 -
字符处理:
仅 Java 有独立 char 类型,JavaScript 和 Python 用字符串表示字符71012。 -
类型安全:
Java 最严格(编译时类型检查),JavaScript 和 Python 更灵活但易产生隐式错误。
此表格综合了三者在设计哲学和应用场景上的差异:JavaScript 强调灵活性,Java 注重性能与类型安全,Python 以简洁和动态性见长。
补充说明
C++特有类型:引用(变量别名)、类对象、模板(泛型)、智能指针(如 std::unique_ptr)。
C语言局限:无原生面向对象支持,需通过结构体和函数指针模拟。
跨语言对比:C/C++注重底层控制,Java/Python/JS侧重开发效率与安全性。
操作符
| 操作符类别 | JavaScript | Java | Python | C/C++ | 异同说明 |
|---|---|---|---|---|---|
| 算术运算符 | +, -, *, /, %, ** (ES6) |
+, -, *, /, %, Math.pow() |
+, -, *, /, %, ** (幂) |
+, -, *, /, %, pow() |
- /:Python和JS中整数除法结果为浮点,Java/C/C++中整数除法取整1,5- **:Python和JS支持幂运算,C/C++/Java需调用函数10 |
| 赋值运算符 | =, +=, -=, *=, /= |
=, +=, -=, *=, /= |
=, +=, -=, *=, /= |
=, +=, -=, *=, /= |
- ++/--:C/C++/Java/JS支持自增自减,Python不支持1,10 |
| 比较运算符 | ==, ===, !=, !==, >, <, >=, <= |
==, !=, >, <, >=, <= |
==, !=, >, <, >=, <=, is |
==, !=, >, <, >=, <= |
- ===:JS严格比较值和类型,其他语言无此符8- is:Python比较对象身份(内存地址)8 |
| 逻辑运算符 | &&, \|\|, ! |
&&, \|\|, ! |
and, or, not |
&&, \|\|, ! |
- Python用关键字,其他语言用符号10 |
| 位运算符 | &, \|, ^, ~, <<, >>, >>> |
&, \|, ^, ~, <<, >>, >>> |
&, \|, ^, ~, <<, >> |
&, \|, ^, ~, <<, >> |
- >>>:JS/Java无符号右移,Python/C/C++无此操作符6,10 |
| 成员/类型检查 | in, instanceof |
instanceof |
in, isinstance() |
无 | - in:JS检查对象属性,Python检查可迭代对象成员8,11- C/C++无内置操作符 |
| 其他操作符 | typeof, ?. (可选链) |
instanceof, ?: (三元) |
** (幂), // (整除) |
-> (指针), :: (作用域) |
- ?.:JS可选链避免空值错误,其他语言无11- ->:C/C++指针成员访问8 |
关键差异说明
-
类型松散性
-
字符串比较
-
运算符重载