Skip to content

第4章:Dart 运算符与表达式

4.1 算术运算符

算术运算符用于执行基本的数学运算:

运算符描述示例
+加法1 + 2 = 3
-减法5 - 3 = 2
*乘法2 * 3 = 6
/除法6 / 2 = 3.0
%取模(余数)7 % 3 = 1
++自增a++++a
--自减a----a

示例

dart
void main() {
  int a = 10;
  int b = 3;
  
  print('a + b = ${a + b}'); // 13
  print('a - b = ${a - b}'); // 7
  print('a * b = ${a * b}'); // 30
  print('a / b = ${a / b}'); // 3.3333333333333335
  print('a % b = ${a % b}'); // 1
  
  // 自增自减
  int c = 5;
  print('c++ = ${c++}'); // 5(先使用后自增)
  print('c = $c'); // 6
  
  int d = 5;
  print('++d = ${++d}'); // 6(先自增后使用)
  print('d = $d'); // 6
}

4.2 赋值运算符

赋值运算符用于给变量赋值:

运算符描述示例
=简单赋值a = 5
+=加法赋值a += 5 等同于 a = a + 5
-=减法赋值a -= 5 等同于 a = a - 5
*=乘法赋值a *= 5 等同于 a = a * 5
/=除法赋值a /= 5 等同于 a = a / 5
%=取模赋值a %= 5 等同于 a = a % 5

示例

dart
void main() {
  int a = 10;
  print('初始值: a = $a'); // 10
  
  a += 5;
  print('a += 5: a = $a'); // 15
  
  a -= 3;
  print('a -= 3: a = $a'); // 12
  
  a *= 2;
  print('a *= 2: a = $a'); // 24
  
  a /= 4;
  print('a /= 4: a = $a'); // 6.0
  
  int b = 10;
  b %= 3;
  print('b %= 3: b = $b'); // 1
}

4.3 比较运算符

比较运算符用于比较两个值:

运算符描述示例
==等于a == b
!=不等于a != b
>大于a > b
<小于a < b
>=大于等于a >= b
<=小于等于a <= b

注意:在 Dart 中,== 运算符会比较对象的内容,而 identical() 函数会比较对象的身份(即是否是同一个对象)。

示例

dart
void main() {
  int a = 5;
  int b = 10;
  
  print('a == b: ${a == b}'); // false
  print('a != b: ${a != b}'); // true
  print('a > b: ${a > b}'); // false
  print('a < b: ${a < b}'); // true
  print('a >= b: ${a >= b}'); // false
  print('a <= b: ${a <= b}'); // true
  
  // 比较对象
  String str1 = 'Dart';
  String str2 = 'Dart';
  String str3 = new String.fromCharCodes(str1.runes);
  
  print('str1 == str2: ${str1 == str2}'); // true(内容相同)
  print('identical(str1, str2): ${identical(str1, str2)}'); // true(字符串常量池)
  print('str1 == str3: ${str1 == str3}'); // true(内容相同)
  print('identical(str1, str3): ${identical(str1, str3)}'); // false(不同对象)
}

4.4 逻辑运算符

逻辑运算符用于组合布尔表达式:

运算符描述示例
&&逻辑与a && b(两个条件都为真才为真)
``
!逻辑非!a(取反)

示例

dart
void main() {
  bool isTrue = true;
  bool isFalse = false;
  
  print('isTrue && isFalse: ${isTrue && isFalse}'); // false
  print('isTrue || isFalse: ${isTrue || isFalse}'); // true
  print('!isTrue: ${!isTrue}'); // false
  print('!isFalse: ${!isFalse}'); // true
  
  // 组合使用
  int age = 18;
  bool hasID = true;
  
  if (age >= 18 && hasID) {
    print('可以进入');
  } else {
    print('不能进入');
  }
}

4.5 条件运算符

三目运算符

语法condition ? expr1 : expr2

描述:如果条件为真,执行 expr1,否则执行 expr2。

示例

dart
void main() {
  int age = 18;
  String message = age >= 18 ? '成年人' : '未成年人';
  print(message); // 成年人
}

空判断运算符

运算符描述示例
??空值合并运算符a ?? b(如果 a 不为 null,返回 a,否则返回 b)
??=空值赋值运算符a ??= b(如果 a 为 null,将 b 赋值给 a)
?.可选链运算符a?.b(如果 a 不为 null,访问 a.b,否则返回 null)

示例

dart
void main() {
  // ?? 运算符
  String? name = null;
  String displayName = name ?? '匿名用户';
  print(displayName); // 匿名用户
  
  // ??= 运算符
  String? username = null;
  username ??= 'guest';
  print(username); // guest
  
  // 可选链运算符
  class Person {
    String? name;
    int? age;
  }
  
  Person? person = null;
  print(person?.name); // null(不会报错)
  
  person = Person();
  print(person?.name); // null
  
  person.name = 'John';
  print(person?.name); // John
}

4.6 表达式与运算符优先级

Dart 中的运算符优先级从高到低排列如下:

  1. 括号 ()
  2. 自增/自减 ++, --
  3. 一元运算符 !, -
  4. 乘法/除法/取模 *, /, %
  5. 加法/减法 +, -
  6. 比较运算符 >, <, >=, <=
  7. 等于运算符 ==, !=
  8. 逻辑与 &&
  9. 逻辑或 ||
  10. 条件运算符 ?:
  11. 赋值运算符 =, +=, -=, *=, /=, %=

示例

dart
void main() {
  // 优先级示例
  int a = 10;
  int b = 5;
  int c = 2;
  
  // 先计算乘法,再计算加法
  int result1 = a + b * c;
  print('a + b * c = $result1'); // 20
  
  // 使用括号改变优先级
  int result2 = (a + b) * c;
  print('(a + b) * c = $result2'); // 30
  
  // 逻辑运算符优先级
  bool x = true;
  bool y = false;
  bool z = true;
  
  // 先计算 &&,再计算 ||
  bool result3 = x || y && z;
  print('x || y && z = $result3'); // true
  
  // 使用括号改变优先级
  bool result4 = (x || y) && z;
  print('(x || y) && z = $result4'); // true
}

4.7 实操案例

结合运算符实现简单计算、条件判断

dart
void main() {
  // 计算圆的面积
  const double pi = 3.14159;
  double radius = 5.0;
  double area = pi * radius * radius;
  print('圆的面积: $area');
  
  // 计算矩形的周长
  double length = 10.0;
  double width = 6.0;
  double perimeter = 2 * (length + width);
  print('矩形的周长: $perimeter');
  
  // 判断成绩等级
  int score = 85;
  String grade;
  
  if (score >= 90) {
    grade = 'A';
  } else if (score >= 80) {
    grade = 'B';
  } else if (score >= 70) {
    grade = 'C';
  } else if (score >= 60) {
    grade = 'D';
  } else {
    grade = 'F';
  }
  
  print('成绩: $score, 等级: $grade');
  
  // 使用三目运算符
  String result = score >= 60 ? '及格' : '不及格';
  print('结果: $result');
  
  // 计算两个数的最大值
  int num1 = 25;
  int num2 = 36;
  int max = num1 > num2 ? num1 : num2;
  print('最大值: $max');
}

运行结果

圆的面积: 78.53975
矩形的周长: 32.0
成绩: 85, 等级: B
结果: 及格
最大值: 36

© 2026 编程马·菜鸟教程 版权所有