【Flutter for OpenHarmony--Dart 入门日记】第3篇:基础数据类型全解析------String、数字与布尔值
作者 :灰灰勇闯IT
时间 :2026年1月
系列定位 :零基础记录 Dart 学习过程,适合编程新手、Flutter 初学者
本文重点 :掌握String、int/double/num、bool的声明、特性与使用技巧

目录
- [1. 为什么需要明确的数据类型?](#1. 为什么需要明确的数据类型?)
- [2. 字符串类型
String------ 处理文本的利器](#2. 字符串类型 String —— 处理文本的利器)- [2.1 基本声明与引号选择](#2.1 基本声明与引号选择)
- [2.2 字符串是可变的(作为变量时)](#2.2 字符串是可变的(作为变量时))
- [2.3 模板字符串:优雅地嵌入变量](#2.3 模板字符串:优雅地嵌入变量)
- [3. 数字类型:
int、double与num](#3. 数字类型:int、double 与 num)- [3.1 三者的区别与适用场景](#3.1 三者的区别与适用场景)
- [3.2 声明与基本运算](#3.2 声明与基本运算)
- [3.3 ⚠️ 赋值规则与类型转换陷阱](#3.3 ⚠️ 赋值规则与类型转换陷阱)
- [4. 布尔类型
bool------ 真假判断的基础](#4. 布尔类型 bool —— 真假判断的基础) - [5. 实战综合:一个"今日状态"小工具](#5. 实战综合:一个“今日状态”小工具)
- [6. 常见误区与最佳实践](#6. 常见误区与最佳实践)
- [7. 小结](#7. 小结)
1. 为什么需要明确的数据类型?
在 Dart 中,每个变量都有明确的类型。这不仅帮助编译器优化性能,还能在编码阶段就发现错误(比如把文字当成数字计算)。
Dart 的四大基础类型构成了我们日常开发的"原子":
String:用于姓名、消息、描述等文本int/double/num:用于计数、价格、坐标等数值bool:用于开关、完成状态、条件判断
🌟 我的感悟 :
类型就像给数据贴标签------"这是名字"、"那是年龄"、"这个是是否完成"。有了标签,程序才知道怎么正确处理它们。
2. 字符串类型 String ------ 处理文本的利器
2.1 基本声明与引号选择
String 用于表示一段文本。Dart 支持单引号 ' ' 和双引号 " ",两者完全等价。
dart
void main() {
String name = '小明';
String greeting = "Hello, Dart!";
print('$name says: $greeting');
}
输出:
小明 says: Hello, Dart!

(图:使用 String 声明文本变量并输出)
✅ 建议:团队项目中统一使用一种引号(如单引号),保持代码风格一致。
2.2 字符串是可变的(作为变量时)
注意:String 本身是不可变对象(immutable),但作为变量时,可以重新赋值为新的字符串。
dart
void main() {
String mood = '开心';
print('今天心情:$mood');
mood = '有点累'; // ✅ 合法!变量指向了新的字符串对象
print('现在心情:$mood');
}
输出:
今天心情:开心
现在心情:有点累

🔍 原理小知识 :
Dart 中所有
String对象一旦创建就不能修改。mood = '新值'实际是让变量mood指向一个全新的字符串对象。
2.3 模板字符串:优雅地嵌入变量
Dart 提供强大的字符串插值(String Interpolation) 功能,无需繁琐拼接。
语法:
$变量名:适用于简单标识符${表达式}:适用于复杂表达式或方法调用
示例:打印"我要在 XX 时间吃早饭"
dart
void main() {
String time = '7:30';
// 方式1:简单变量
String plan1 = '我要在$time的时候吃早饭';
// 方式2:推荐!使用 ${} 更清晰安全
String plan2 = '我要在${time}的时候吃早饭';
print(plan1);
print(plan2);
}
输出:
我要在7:30的时候吃早饭
我要在7:30的时候吃早饭

💡 强烈建议 :
即使是简单变量,也优先使用
${time}而非$time。原因:
- 避免歧义(如
$timeAM会被解析为变量timeAM,而非time + "AM")- 代码风格统一,便于维护
3. 数字类型:int、double 与 num
3.1 三者的区别与适用场景
| 类型 | 含义 | 示例 | 适用场景 |
|---|---|---|---|
int |
整数 | 42, -100 |
计数、索引、ID |
double |
浮点数(小数) | 3.14, -0.5 |
坐标、价格、科学计算 |
num |
int 和 double 的父类 |
可以是任意数字 | 通用数字处理函数 |
📌 注意 :
num是抽象类,不能直接实例化,但可作为参数或返回类型。
3.2 声明与基本运算
dart
void main() {
int count = 10;
double price = 19.99;
num total = count * price; // num 可以接收 int 或 double 运算结果
print('数量:$count');
print('单价:$$price');
print('总价:$$total'); // 输出:$199.9
}

✅ 特点:
int和double都继承自num- 数学运算(
+ - * /)会自动提升类型(如int / int结果是double)
3.3 ⚠️ 赋值规则与类型转换陷阱
Dart 是强类型语言,不同类型不能随意赋值!以下是关键规则:
| 赋值方向 | 是否允许 | 说明 |
|---|---|---|
int → double |
❌ 不允许 | 需显式转换 |
double → int |
❌ 不允许 | 会丢失精度 |
int → num |
✅ 允许 | int 是 num 子类 |
double → num |
✅ 允许 | double 是 num 子类 |
num → int |
❌ 不允许 | 需类型检查 + 转换 |
num → double |
❌ 不允许 | 同上 |
正确转换方式:
dart
void main() {
int a = 5;
double b = a.toDouble(); // ✅ 显式转换
int c = b.toInt(); // ✅ 截断小数部分(不是四舍五入!)
num n = 3.14;
if (n is double) {
double d = n as double; // ✅ 安全转换
print('π ≈ $d');
}
}
⚠️ 重要提醒 :
b.toInt()是截断 (truncate),不是四舍五入!如
3.9.toInt()结果是3,不是4。
4. 布尔类型 bool ------ 真假判断的基础
bool 只有两个可能值:true 或 false,常用于条件判断。
场景:记录作业是否完成
dart
void main() {
bool homeworkDone = false;
print('作业完成了吗?${homeworkDone ? '是的!' : '还没呢...'}');
// 假设现在完成了
homeworkDone = true;
print('现在完成了吗?${homeworkDone ? '搞定!' : '继续加油'}');
}
输出:
作业完成了吗?还没呢...
现在完成了吗?搞定!

✅ 最佳实践 :
布尔变量命名建议以
is、has、can等开头,如isLoggedIn、hasPermission,提高可读性。
5. 实战综合:一个"今日状态"小工具
结合所学,我们写一个小程序,展示今天的各种状态:
dart
void main() {
// 文本
String userName = '小明';
// 数字
int studyHours = 3;
double sleepHours = 7.5;
// 布尔
bool ateBreakfast = true;
bool finishedHomework = false;
// 输出
print('=== $userName 的今日状态 ===');
print('学习时长:${studyHours} 小时');
print('睡眠时长:${sleepHours} 小时');
print('吃早餐了吗?${ateBreakfast ? '吃了' : '没吃'}');
print('作业完成了吗?${finishedHomework ? '完成了' : '还在努力'}');
// 综合判断
bool isGoodDay = ateBreakfast && sleepHours >= 7 && studyHours > 0;
print('今天是充实的一天吗?${isGoodDay ? '是的!' : '明天加油!'}');
}
运行效果清晰展示了四种类型的协同工作!
6. 常见误区与最佳实践
❌ 误区1:"String 不能改,所以不能重新赋值"
→ 错!String 对象不可变,但变量可以指向新对象。
❌ 误区2:"num 可以随便转成 int 或 double"
→ 必须先用 is 检查类型,再用 as 或 .toInt() 转换。
✅ 最佳实践:
- 优先使用显式类型声明(如
String name = ...),而非var - 模板字符串统一用
${} - 数字运算注意类型提升(
/总是返回double) - 布尔变量命名要有语义(避免
flag1,status2)
7. 小结 & 下期预告
✅ 本篇收获:
- 掌握了
String的声明、可变性与模板字符串用法 - 理清了
int、double、num的关系与赋值规则 - 学会了
bool的基本使用与命名规范 - 通过综合示例巩固了多类型协作
🎯 动手练习 :
尝试写一个"购物清单"程序,包含商品名(String)、单价(double)、数量(int)、是否已购买(bool),并计算总金额。
💬 互动时间 :
你在使用模板字符串时有没有遇到过 $ 解析错误?或者在数字类型转换时踩过坑?欢迎在评论区分享你的经历!如果你觉得这篇文章帮你理清了 Dart 基础类型,别忘了 点赞 + 收藏 + 关注,你的支持是我持续更新的最大动力!
📎 附:所有代码均可直接复制运行
开发环境:Dart SDK 3.0+,推荐使用 VS Code + Dart 插件
📌 图片上传提醒(重要!)
你提供的图片链接(如 https://i-blog.csdnimg.cn/direct/...)无法在 CSDN 外部显示 。
✅ 正确做法:
- 保存好你的
.png文件到本地 - 在 CSDN 编辑器中,点击"图片"按钮上传这些文件
- 按文中
[图片:描述]的顺序上传即可,CSDN 会自动生成有效链接
继续加油!你已经掌握了 Dart 的"词汇表",下一步就是学会"造句"了 👨💻✨