kotlin中ByteArray和Array <Byte>之间的区别

lat*_*l42 18 java bytearray kotlin

我不明白为什么如java.security.MessageDigest.digest()被声明为返回方法byte[]在Java中返回一个ByteArray在科特林虽然科特林通常似乎需要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() 
}
Run Code Online (Sandbox Code Playgroud)

类型不匹配:推断类型ByteArray?,但Array<Byte>?预期

And*_*lav 36

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

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

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


Dan*_*l B 11

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

的ByteArray等于字节[]中的Java
阵列<字节>等于字节]中的Java

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

  • 使用ByteArray有一个好处,每个条目都是一个原语,因此ByteArray需要更少的内存并可能节省一些自动装箱. (2认同)
  • 简单明了的答案。据我所知,java开发人员使用byte[]而不是Byte[]。 (2认同)