2012-02-26 170 views
14

我不明白爲什麼,例如在Java中聲明爲返回byte[]java.security.MessageDigest.digest()方法返回Kotlin中的ByteArray,但Kotlin通常似乎稱爲byte[]Array<Byte>ByteArray和數組之間的差異<Byte> in kotlin

E.g.以下不工作:

fun main(args : Array<String>) { 
    val md = java.security.MessageDigest.getInstance("SHA") 
    if (md == null) throw NullPointerException() 
    val result : Array<Byte>? = md.digest() 
} 

類型不匹配:推斷類型是ByteArray?Array<Byte>?預計

+0

Kotlin數組的當前文檔:https://kotlinlang.org/docs/reference/basic-types.html#arrays以及與Kotlin的Java數組互操作:https://kotlinlang.org/docs/reference/java -interop.html#java-arrays – 2015-12-29 04:54:11

回答

25

由於Java的限制,科特林有9種數組類型:數組< ...>爲引用的陣列(在JVM的意義上)和8種專門的數組類型,即IntArray,字節數組等

https://kotlinlang.org/docs/reference/java-interop.html#java-arrays

的主要原因是這種區別的表現:如果我們沒有專門化數組會導致大量的裝箱/拆箱和數組變慢。這將是不可接受的,因爲人們可能想要數組超過集合的唯一原因是性能

4

簡而言之,僅供將來參考。

的ByteArray等於字節[]中的Java
陣列<字節>等於字節[]在Java中

使用了另一種在科特林沒有益處,只有當代碼要被解析爲Java時。

+0

使用ByteArray有一個好處,每個條目都是一個原語,所以ByteArray需要更少的內存並且可能會節省一些自動裝箱。 – Andy 2018-01-17 03:37:19