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

为何string赋值null后,Console.Write(str)输出空白但访问Length抛空引用异常?

问题解答

核心原因:两个操作的本质逻辑完全不同

1. Console.Write(str) 不报错的原因

Console.Write 提供了接受 object 类型参数的重载方法。当你传入 null 时,这个重载会做特殊兼容处理:它直接将 null 转换为空字符串("")输出,全程不会尝试调用 string 类型的任何实例方法或属性。

简单说,这里根本不需要依赖 str 指向的堆对象,方法本身就处理了 null 参数的情况,自然不会触发异常。

2. Console.Write(str.Length) 抛出空引用异常的原因

Length 是 string 类型的实例属性,只有当 str 指向一个有效的字符串实例(堆上的字符串对象)时,才能访问这个属性。当 str = null 时,它并没有指向任何堆对象,此时尝试访问实例属性,CLR 会直接抛出 NullReferenceException——因为没有实例能提供 Length 的值。

补充说明

虽然 string 是引用类型且有语言层面的特殊优化(比如字符串字面量池),但这些不改变 null 的本质:null 代表没有指向任何对象的引用。Console.Write 只是恰好对 null 参数做了友好处理,而直接访问实例成员(属性、方法)时,必须要有有效的对象实例,否则必然触发空引用异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:17:04