我不明白为什么,例如在Java中声明为返回java.security.MessageDigest.digest()
的{{1}}方法在Kotlin中返回byte[]
,尽管Kotlin通常似乎将ByteArray
称为byte[]
。
E.g。以下不起作用:
Array<Byte>
类型不匹配:推断类型为fun main(args : Array<String>) {
val md = java.security.MessageDigest.getInstance("SHA")
if (md == null) throw NullPointerException()
val result : Array<Byte>? = md.digest()
}
,但预计为ByteArray?
答案 0 :(得分:32)
由于Java的限制,Kotlin有9种阵列类型:Array&lt; ...&gt;对于引用数组(在JVM意义上)和8种专用数组类型,即IntArray,ByteArray等。
https://kotlinlang.org/docs/reference/java-interop.html#java-arrays
这种区别的主要原因是性能:如果我们没有专门化数组,它会导致大量的装箱/拆箱并使阵列变慢。这是不可接受的,因为人们可能希望更喜欢数组而不是集合的唯一原因是性能。
答案 1 :(得分:9)
Java中的ByteArray 等于 byte [] 数组&lt;字节&gt; 等于Java中的字节[]
只有在将代码解析为Java时,才能在Kotlin中使用其中一个获益。