ByteArray和数组<Byte>在kotlin中的区别

我不明白为什么例如Java中声明为返回byte[]java.security.MessageDigest.digest()方法返回Kotlin中的ByteArray ,尽管Kotlin通常似乎调用byte[] 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?Array<Byte>? 预计

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

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

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

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

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

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