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

关于Kotlin安全调用操作符(?.)的文档内容澄清请求

澄清Kotlin安全调用操作符?.的行为

你对?.的核心理解是正确的,文档的表述确实容易造成歧义,下面分场景明确它的实际行为:

  • 场景1:对象本身为null
    当调用者对象是null时,?.会直接返回null,不会尝试访问后续的属性/方法,从根源避免空指针异常。示例:

    data class User(val name: String?)
    val user: User? = null
    val userName = user?.name // userName 的值是 null,不会触发NPE
    
  • 场景2:对象不为null,但目标属性为null
    这种情况下,?.会正常访问属性,若属性本身是null,就直接返回该null值——这和直接使用user.name的结果一致,但?.的存在是为了兼容对象可能为null的场景(比如后续代码中user的可空性变化时,这段代码无需修改也能安全运行)。示例:

    val user = User(name = null)
    val userName = user?.name // userName 的值是 null,同样不会触发NPE
    

文档里的描述“若对象的属性为null,安全调用操作符将返回null”,其实是想强调安全调用在两种场景下都能返回null且不触发异常:既包括对象null时的直接返回,也包括属性本身null时的正常返回。它的核心价值始终是避免对象为null时访问成员导致的空指针,而属性本身的null只是正常的返回值,并不会引发错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:25:01