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

Kotlin中哪段代码与Code A逻辑等价?

咱们结合给定的IsRegistered函数实现,来逐个解答这两个问题:

1. Code A与Code B是否等价?

结论:完全等价

在Kotlin里,if语句的条件本身就要求是布尔值。Code A直接把IsRegistered(myContext)的布尔返回值作为判断条件;Code B则多了一步——把这个布尔值和true做相等比较(==)。

但因为IsRegistered函数返回的是非空Boolean类型(最后用!!强制解包,而且从逻辑上看registeredStatus不可能为null),所以两种写法的执行结果完全一致:

  • 当IsRegistered返回true时,true == true结果为true,和Code A的判断结果相同
  • 当返回false时,false == true结果为false,也和Code A的判断结果相同

说白了,Code B就是Code A的“啰嗦版”,Kotlin里更推荐写Code A这种简洁的写法。

2. Code A与Code C是否等价?

结论:在当前的IsRegistered函数实现下,两者完全等价

先得搞清楚Kotlin里===的作用:它是引用相等判断(在JVM上,对于基本类型来说,===其实就是值相等,因为基本类型没有引用一说)。不过咱们得结合IsRegistered的返回值细节来看:

  1. IsRegistered里,不管是从prefs.getBoolean拿到的布尔值(会自动装箱为Boolean实例),还是直接赋值的true,都是JVM中被缓存的单例——也就是Boolean.TRUE和Boolean.FALSE,不会产生新的实例。
  2. 代码里写的字面量true,对应的也是同一个Boolean.TRUE单例。

所以用===比较时:

  • 如果IsRegistered返回true,true === true结果为true,和Code A的判断一致
  • 如果返回false,false === true结果为false,也和Code A的判断一致

不过这里要提个小前提:如果哪天IsRegistered的实现变了,比如手动创建了新的Boolean实例(比如写Boolean(true),这种情况不会走缓存),那===和直接判断的结果可能就不一样了,但在当前给定的实现下,两者是完全等价的。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:20:41