Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么以及如何比较可为null的Int类型是否相等,但可以';不能比较大/小吗?_Android_Kotlin_Null - Fatal编程技术网

Android 为什么以及如何比较可为null的Int类型是否相等,但可以';不能比较大/小吗?

Android 为什么以及如何比较可为null的Int类型是否相等,但可以';不能比较大/小吗?,android,kotlin,null,Android,Kotlin,Null,对不起,这个问题很简单,但是。。为什么是Int/Long/Double等。。可以与if语句中的==进行比较,但当尝试与>进行比较或

对不起,这个问题很简单,但是。。为什么是Int/Long/Double等。。可以与if语句中的==进行比较,但当尝试与>进行比较或<编译器拒绝使用它时?

与函数类型一样,相等也是一种语言特性,因此它只适用于可为空的对象。当您尝试跟随对源代码的函数调用时,它只会将您带到
Any.equals
,即使如果遵循运算符函数的规则,该函数不应该从null调用

您还将注意到,
Any
的函数都没有在源代码中显示它们的实现,即使它们不是抽象的,因为
Any
是特殊的。原语类的许多功能也是特殊的,尽管它们的函数签名显示在源代码中

如果您想编写自己的函数来处理可为null的类型,您可以将其定义为具有可为null的接收器的扩展函数。例如:

fun MyClass?.doSomething() {
    if (this == null) {
        println("is null")
    } else {
        println("Hello from $this")
    }
}

我不是100%确定,但是您可以比较
null==null
,它将返回true,或者
null==1
它将返回false。但是你怎么看待
null<1
?它应该返回true还是false?我理解你的意思,但是编译器是如何知道的呢?根据他所决定的方法,哪个是有效的,哪个不是?
a==b
转化为
a?.equals(b)?:(b==null)
,但对于比较运算符,如果存在可为null的对象,我们应该做什么并不明显“请注意,显式比较null时优化代码没有意义:a==null将自动转换为a==null。“
==
表示引用相等,即内存中的同一个对象,而
=
则表示
等于
,可能是同一个对象,也可能是两个不同的实例返回
true
,表示
a.equals(b)
。就我所知,反正只有一个
null
实例(可能是它被翻译成
===
!)我不知道在函数声明中我可以添加一个问号。所以我可以添加:Int?的king.compareTo扩展方法?