运算符

1.算术运算符

运算符 含义
+ 加法
- 减法
-expr 负数
* 乘法
/ 除以
~/ 除法,返回整数结果
% 取模
1
2
3
4
5
6
7
print(2 + 3);
print(2 - 3);
print(-5);
print(2 * 3);
print(3 / 2);
print(10 ~/ 3);
print(10 % 3);

2.前缀和后缀运算符

操作符 含义
++var var = var + 1 (表达式为 var + 1)
var++ var = var + 1 (表达式为 var)
–var var = var +-1(表达式为 var - 1)
var– var = var - 1(表达式为 var )
1
2
3
4
5
6
7
8
9
10
11
int a;
int b;
int c;
int d;
int e;

a = 10;
b = ++a; //11 a 11
c = a++; //11 a 12
d = --a; // 11 a 11
e = a--; //11 a 10

3.关系运算符

操作符 含义
== 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于

判断俩个对象x和对象b是否表示同一事物,可以使用 == 运算符(极少数情况下,如果需要知道是否时同意对象,可以使用**identical()**函数) ==运算符的工作原理如下:

  • 如果 x 或 y 为 null,则当两者都为 null 时返回 true,当其中只有一个是 null 时返回 false。
  • 返回对 x 调用 == 方法的结果,参数为 y。
1
表达式 x == y 其实是语法糖,等价于 x.==(y)

4. 类型测试操作符

as、is 和 is! 运算符在运行时检查类型时很方便

操作符 含义
as 类型转换
is 如果对象具有指定的类型
is! 如果对象不具有指定的类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// 类型检查
num value = 3.14;
if (value is double) {
print('value 是 double 类型'); // ✅ 会执行
}

if (value is int) {
print('value 是 int 类型'); // ❌ 不会执行
}


// is! 类型不匹配检查
String name = 'Alice';

if (name is! int) {
print('name 不是 int 类型'); // ✅ 会执行
}

// 类型转换(常用于将父类型转为子类型)
class Animal {}
class Dog extends Animal {
void bark() => print('Woof!');
}

void main() {
Animal animal = Dog();
// animal.bark(); // ❌ 编译错误:Animal 没有 bark 方法

Dog dog = animal as Dog; // 类型转换
dog.bark(); // ✅ 输出 'Woof!'
}

5.赋值运算符

= *= %= >>>= ^=(按位异或运算)
+= /= <<= &=
-= ~/= >>=
1
2
3
4
5
6
7
8
9
10

1 <<< 3 // 8

16 >>> 2 //4

10 ^ 2 // 8

10 & 2 //2

10 | 2 // 2

6.逻辑运算符

操作符 含义
! 反转
| 逻辑或
&& 逻辑与

7.按位和移位运算符

操作符 含义
&
|
^ 异或
~ 一元按位取反
<< 左移
>> 右移位
>>> 无符号右移

8.条件表达式

条件 ?表达式 1:表达式2

表达式1 ?? 表达式2 (如果 expr1 非空,则返回其值;否则,计算并返回 expr2 的值。)

9.链式表示法

级联操作符( ..?..)允许你对同一个对象执行一系列操作 除了访问实例成员, 你还可以在这个对象上调用实例方法

1
2
3
4
var paint = Paint()
..color = Colors.black
..strokeCap = StrokeCap.round
..strokeWidth = 5.0;

10.展开操作符

展开操作符会计算一个产生集合的表达式,解包产生的值,并将它们插入到另一个集合中

1
2
3
4

var c = [1,2,3,4,5,6,6,7];
var r = [1,2,34];
print([...c,...r]);

11.其他运算符

操作符 名称 含义
() 函数应用 表示一个函数调用
[] 下标访问 表示对可重写的 [] 操作符的调用
?[] 条件索引访问 但最左边的操作数可以是 null;
. 成员访问 指表达式的一个属性
?. 条件成员访问 但最左边的操作数可以是 null;
! 非空断言 将表达式转换为其底层的非空类型,如果转换失败则抛出运行时异常

12.优先级

描述 运算符 结合性
一元后缀 expr++ expr– () []  ?.  !
一元前缀 -expr !expr ~expr ++expr –expr  await expr
乘法 *  / %  ~/
加法 + -
移位 <<   >>  >>>
按位与 & -
按位异或 ^ -
按位或 | -
关系一类型测试 >=  as is is!
相等 ==  !=
逻辑与 && -
逻辑或 | -
空置判断 ?? -
条件 expr1?expr2:expr3
级联 .. ?.. -
赋值 =  *= /=

本文作者:finyou

本文链接:http://finyou.top/2026/04/07/flutter/dart/operator/

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

ESC 关闭 | 导航 | Enter 打开
输入关键词开始搜索