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; c = a++; d = --a; e = a--;
|
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 类型'); }
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();
Dog dog = animal as Dog; dog.bark(); }
|
5.赋值运算符
| = |
*= |
%= |
>>>= |
^=(按位异或运算) |
| += |
/= |
<<= |
&= |
|
| -= |
~/= |
>>= |
|
|
1 2 3 4 5 6 7 8 9 10
| 1 <<< 3
16 >>> 2
10 ^ 2
10 & 2
10 | 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 |
右 |
| 级联 |
.. ?.. |
- |
| 赋值 |
= *= /= |
右 |