ByteArray和数组在kotlin中的区别

我不明白为什么例如Java中声明为返回byte[]java.security.MessageDigest.digest()方法返回Kotlin中的ByteArray ,尽管Kotlin通常似乎调用byte[] Array

例如以下不起作用:

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

types不匹配:推断的types是ByteArray?Array? 预计

由于Java的限制,Kotlin有9种数组types:Array <...>用于引用数组(JVM意义上的)和8种专用数组types,即IntArray,ByteArray等

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

这个区别的主要原因是性能:如果我们没有专门化数组,会导致大量的装箱/拆箱,并使数组变慢。 这将是不可接受的,因为人们可能希望比数组更喜欢数组的唯一原因是性能

简而言之,仅供将来参考。

ByteArray等于Java中的byte []
Array 等于Java中的Byte []

只有在代码被解析为Java时,才能在Kotlin中使用其中一个。