在kotlin </byte>中ByteArray和Array <byte>之间的区别

时间:2012-02-26 22:38:52

标签: java bytearray kotlin

我不明白为什么,例如在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?

2 个答案:

答案 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中使用其中一个获益。