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

Dart中null对象调用toString()不抛异常?为何赋值后输出"null"?

问题解答

先看你的代码片段:

void main(List<String> args){
 String? test1 = null;
 String test2 = test1.toString();
 print(test1);
 print(test2);
}

为什么第二个print输出"null"而非空字符串?

  • Dart里的null是Null类的唯一实例,这个类重写了toString()方法,返回的就是字符串字面量"null",不是空字符串。所以调用test1.toString()时,实际执行的是Null类的toString()逻辑,得到的结果自然是"null"。
  • 虽然test2被声明为非可空String,但"null"本身是一个合法的非空字符串实例,完全符合类型要求,因此赋值后打印的就是这个字符串。

为什么null调用toString()不会抛出异常?

  • 在Dart中,null不是无效引用,而是Null类的具体实例。这个类继承自Object,并且内置实现了toString()、hashCode等方法,调用这些方法属于合法的对象方法调用,不会触发空指针类异常。
  • 和部分语言(比如Java)中null调用方法会报错不同,Dart从设计层面就把null作为一个可操作的对象来处理,因此能安全调用自身类中定义的方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:24:59