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
相关产品推荐
相关产品推荐

