Any

Prerequisites:

Any是所有類別的父類別。

===與==

Any===與==都是比較記憶體位址是否相同。

class繼承Any若沒有覆寫equals的狀況下,==與===的功能是相同的,都是比較記憶體位址。

如同Java的Object,equals()的功能與==是相同的,都是比較記憶體位址是否相同。

obj1與obj2為二個物件。

1
2
3
4
5
6
7
8
fun main() {
    val obj1 = Airplane()
    val obj2 = Airplane()
    println("equals = ${obj1 == obj2}")
    println("compare = ${obj1 === obj2}")
}
class Airplane {
}
equals false
compare false

將obj2指向obj1記憶體位址。

1
2
3
4
5
6
7
8
fun main() {
    val obj1 = Airplane()
    val obj2 = obj1
    println("equals = ${obj1 == obj2}")
    println("compare = ${obj1 === obj2}")
}
class Airplane {
}
equals = true
compare = true

執行結果==與===都是比較記憶體位址是否相同。

toString()

印出package+class name@16進制的hashCode

1
2
3
4
5
6
fun main() {
    val obj1 = Airplane(1, 500)
    println(obj1.toString())
}
class Airplane(val id:Int, val capacity:Int = 0) {
}
Airplane@5674cd4d

印出物件,也是呼叫toString()的方法,以下程式碼的結果跟上面的一樣。

1
2
3
4
5
6
fun main() {
    val obj1 = Airplane(1, 500)
    println(obj1)
}
class Airplane(val id:Int, val capacity:Int = 0) {
}
Airplane@5674cd4d

hashCode

使用記憶體位址進行運算,每個物件的hashCode是不相同的。

1
2
3
4
5
6
fun main() {
    val obj1 = Airplane(1, 500)
    println(obj1.hashCode())
}
class Airplane(val id:Int, val capacity:Int = 0) {
}
1450495309

results matching ""

    No results matching ""