基本数据类型
什么是数据类型?
数据类型(Data Type)是编程语言中对数据的分类方式,它决定了:
- 该数据能存储什么值(取值范围)
- 该数据能参与哪些操作(如:数字可相加,字符串可拼接)
- 程序如何在内存中分配空间和解释这些比特(bit)
类比理解:就像现实中的容器——水杯(装液体)、书架(放书籍)、信箱(收信件)。不同容器用途不同;同样,int 存整数、char 存单个字符、boolean 表示真假。
一、数值类型(Numeric Types)
1. 整数类型(Integer)
定义:表示不带小数点的数字,如 42、-7、0。
| 语言 | 常见关键字 | 说明 |
|---|---|---|
| Python | int |
任意精度整数(无溢出限制,如 10**1000 仍有效) |
| Java / C / C++ | int, long, short, byte |
有固定位宽(如 Java int 是 32 位,范围:−2,147,483,648 到 2,147,483,647) |
| JavaScript | number(整数是其子集) |
所有数字统一为 64 位浮点数,但整数运算精确到 ±2⁵³ |
2. 浮点数类型(Floating-Point)
定义:表示带小数点或科学计数法的实数,如 3.14、-0.001、2.5e-4(即 0.00025)。
注意:因二进制无法精确表示某些十进制小数(如 0.1 + 0.2 !== 0.3),浮点数存在精度误差,不可用于金融等需绝对精度场景(应使用定点数或专用库)。
3. 其他数值类型(简要)
- 复数(Complex):如 Python 的
3+4j,用于数学/工程计算。 - 无符号整数(Unsigned):如 C 的
unsigned int,只表示 ≥0 的整数,范围更大。 - 大数(Big Number):如 JavaScript 的
BigInt(写法:123n),支持任意精度整数运算。
二、布尔类型(Boolean)
定义:仅有两个取值的类型:true(真)和 false(假)。是逻辑判断与流程控制的基础。
常见误区:
- ≠ 数字
1和0(尽管某些语言允许隐式转换,但语义不同) - ≠ 字符串
"true"/"false"(它们是字符串,不是布尔值)
典型用法:条件语句(if)、循环判断(while)、函数返回状态等。
// 示例:正确使用布尔值
let isLoggedIn = true;
if (isLoggedIn) {
console.log("欢迎回来!");
}
三、字符与字符串类型(Character & String)
1. 字符(Character)
表示单个符号,如 'A'、'5'、'$'、'中'。
- C/C++/Java:用单引号
' ',类型为char(通常 1 字节,ASCII 或 Unicode 编码) - Python / JavaScript:没有独立
char类型,单引号/双引号包裹的单字符仍是str/string类型(长度为 1 的字符串)
2. 字符串(String)
定义:由零个或多个字符组成的有序序列,如 "Hello"、""(空字符串)、"123abc"。
关键特性:
- 不可变性(Immutable):多数语言(Python、Java、JS)中,字符串创建后不可修改内容(修改实际是新建对象)
- 编码标准:现代语言普遍采用 UTF-8 或 UTF-16 编码,支持中文、emoji 等全球字符
- 常用操作:拼接(
+)、索引(s[0])、切片(Python:s[1:4])、查找(.indexOf())、大小写转换等
注意:字符串不是“字符数组”,尽管可按索引访问,但底层实现和行为(如内存布局、方法支持)有本质区别。
四、空值与未定义(Null & Undefined)
这两个类型用于表示“无值”或“缺失值”,但语义和使用场景不同:
| 类型 | 含义 | 典型语言 |
|---|---|---|
null |
“有意为之的空值”——程序员主动赋值,表示“这里本该有值,但现在没有” | Java, C#, JavaScript, Python(None 语义接近) |
undefined |
“尚未定义的值”——系统自动赋予,如变量声明未赋值、函数无返回值、对象属性不存在 | JavaScript(特有) |
重要提醒:JavaScript 中 null == undefined 为 true(抽象相等),但 null === undefined 为 false(严格相等),因其类型不同(null 是对象类型,undefined 是未定义类型)。
五、总结:如何选择合适的数据类型?
- 明确需求:要存数字?文本?真假?还是“没有”?
- 关注范围与精度:大整数选
BigInt或 Pythonint;高精度计算避免float,改用十进制库。 - 重视安全性:用户输入的数字先校验再转类型;字符串拼接防注入;空值必须显式检查(
if (x != null))。 - 遵循语言惯例:用 Python 就用
None,不用null;Java 中字符串用String类而非char[](除非特殊性能要求)。
✅ 小测验:下面哪项是合法的布尔字面量?
A) "true" B) true C) 1 D) Boolean(1)
答案:B(只有 B 是布尔字面量;A 是字符串,C 是数字,D 是函数调用结果)