You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart中??=和!运算符的含义是什么?

Dart中??=和!运算符的含义解析

一、??= 空赋值运算符

??= 是Dart的空赋值运算符,逻辑如下:

  • 仅当左侧变量为null时,才将右侧值赋值给左侧;
  • 若左侧变量已有非空值,则不执行赋值,保留原值。

对应你提供的代码片段:

tail ??= head;

完全等价于:

if (tail == null) {
  tail = head;
}

在这段链表的push方法里,它用来处理链表初始化场景——第一次添加节点时,tail还未被赋值(为null),此时让tail和head指向同一个节点;后续再添加节点时,tail已有值,这个赋值操作就不会再执行。

二、! 空断言运算符

! 是空断言运算符,作用是向Dart编译器明确声明:这个变量一定不是null,强制编译器跳过非空检查。

注意:如果运行时该变量实际为null,程序会直接抛出空指针异常,所以必须确保变量在使用时确实非空才能用这个运算符。

看你提供的append方法代码:

// 1
if (isEmpty) {
 push(value);
 return;
}
// 2
tail!.next = Node(value: value);
// 3
tail = tail!.next;

代码开头的isEmpty判断已经排除了链表为空的情况,进入后续代码时,链表至少有一个节点,tail必然非空,所以可以安全使用!来消除编译器的非空警告,直接访问tail的next属性。

内容的提问来源于stack exchange,提问作者Alvin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 06:33:27