原始伴随常量和java包装常量之间的区别

时间:2018-03-16 17:19:48

标签: kotlin constants primitive

Kotlin重新定义了许多已在Java中定义的原始常量,例如Long.MAX_VALUEDouble.NaN

在Kotlin中进行编码时,它们之间有什么区别?

要明确的是,我提到了,例如:

kotlin.Long.Companion.MAX_VALUE
java.lang.Long.MAX_VALUE

2 个答案:

答案 0 :(得分:2)

这是一个普遍的现象:Kotlin标准库的很大一部分基本上与Java相同。这是

  1. Kotlin可以提供更精确的类型:可空和非可空或List vs MutableList;

  2. 可以从Kotlin-JS或Kotlin-Native或其他未来的Kotlin实现访问该库的这一部分。

  3. 出于这两个原因,请坚持使用Kotlin标准库类型和方法,除非您特别需要使用Java。

    Long(和Int等)甚至是一种特殊情况,因为它们对应于多种Java类型:在某些上下文中它们最终成为原语({{1其他人作为盒装版本(long)。你大多不关心Kotlin的这种差异,所以有更好的理由继续使用java.lang.Long

答案 1 :(得分:1)

Kotlin Long类(以及Java中对应的所有其他类)都是包装器,它取决于类型是否为可空或不在int内部(在JVM上)表示值(原始的,不可空的)或Integer(对象,可空)。

看看here

  

表示64位有符号整数   在JVM上,此类型的非可空值表示为基本类型long的值。

Kotlin和Java版MAX_VALUE都是9223372036854775807L,但由于kotlin.Long是一个包装器,它的实现可以改变,可能会改变MAX_VALUE,所以它最好坚持kotlin.Long.Companion.MAX_VALUE