哪一个与Kotlin中的Code A相同?

时间:2018-03-16 06:18:49

标签: android kotlin

有代码A,代码B和代码C.

  1. Code A是否等同于Code B?

  2. Code A是否等同于Code C?

  3. 代码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!!    
    }
    

3 个答案:

答案 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

相同