有代码A,代码B和代码C.
Code A是否等同于Code B?
Code A是否等同于Code C?
代码A
if (IsRegistered(myContext) ) {
}
代码B
if (IsRegistered(myContext) == true) {
}
代码C
if (IsRegistered(myContext) === true) {
}
功能
fun IsRegistered(myContext: Context): Boolean {
val prefs = PreferenceManager.getDefaultSharedPreferences(myContext)
var registeredStatus: Boolean? = prefs.getBoolean("IsRegistered", false)
val isPro = myContext.resources.getBoolean(R.bool.IsProVersion)
if (isPro) {
registeredStatus = true
}
return registeredStatus!!
}
答案 0 :(得分:1)
代码A和B完全相同。第一个是不可取的,因为B中的等式检查只是嘈杂。另一方面,代码C检查referential equality:
===
操作(及其否定对应!==
)检查引用相等性。当且仅当a和b指向同一个对象时,a === b
才会计算为true
。对于运行时表示为基本类型的值(例如,Int),===
等式检查与<{1}}检查的等效。
如果你使用你的Code C,IDE(至少是IDEA)不喜欢它,并告诉你在==
类型上使用===
已被“弃用”。
已经讨论过here。
此处应推荐代码B.
答案 1 :(得分:-1)
代码A等同于代码B,因为
a === b当且仅当a和b指向相同时才求值为true 对象
答案 2 :(得分:-1)
if (IsRegistered(myContext) ) {
}
如果方法IsRegistered返回true,则执行if中的代码。
if (IsRegistered(myContext) == true) {
}
如果methods返回true,则执行此操作。实际上它是不必要的比较,但如果IsRegistered可能返回null(因为null isn&#39; t),则可能很有用,但在这种情况下,它只是额外的8个字符。
if (IsRegistered(myContext) === true) {
}
这也等同于A和B,因为Boolean是基本类型,而===运算符与==(ref:https://kotlinlang.org/docs/reference/equality.html#referential-equality)
相同