原始伴随常量和 java 包装器常量之间的区别
Difference between primitive companion constants and java wrapper constant
Kotlin重新定义了一些已经在Java中定义的原始常量,例如Long.MAX_VALUE
或Double.NaN
.
它们之间有什么区别?在使用 Kotlin 编写代码时应该首选哪个?
为了清楚起见,我指的是,例如:
kotlin.Long.Companion.MAX_VALUE
java.lang.Long.MAX_VALUE
Kotlin Long
class(以及所有其他在 Java 中有对应项的)是包装器,这取决于类型是否可为空或不在内部表示值(在JVM)与int
(原始,不可为空)或Integer
(对象,可为空)。
看看here:
Represents a 64-bit signed integer.
On the JVM, non-nullable values of this type are represented as values of the primitive type long
.
Kotlin 和 MAX_VALUE
的 Java 版本都是 9223372036854775807L
,但由于 kotlin.Long
是一个包装器,它的实现可能会改变,这可能会改变 MAX_VALUE
,所以最好坚持kotlin.Long.Companion.MAX_VALUE
。
这是一个普遍现象:Kotlin标准库的很大一部分与Java中的基本相同。这样
Kotlin 可以提供更精确的类型:nullable 与 non-nullable 或 List
与 MutableList
;
可以从 Kotlin-JS 或 Kotlin-Native 或其他未来的 Kotlin 实现访问库的这一部分。
出于这两个原因,请坚持使用 Kotlin 标准库类型和方法,除非您有某些特定需要使用 Java 类型和方法。
Long
(和 Int
等)甚至是一种特殊情况,因为它们对应于不止一种 Java 类型:在某些情况下,它们最终会成为原始版本 (long
),在其他版本中是盒装版本 (java.lang.Long
)。您大多不关心 Kotlin 中的这种差异,因此有更好的理由继续使用 kotlin.Long
.
Kotlin重新定义了一些已经在Java中定义的原始常量,例如Long.MAX_VALUE
或Double.NaN
.
它们之间有什么区别?在使用 Kotlin 编写代码时应该首选哪个?
为了清楚起见,我指的是,例如:
kotlin.Long.Companion.MAX_VALUE
java.lang.Long.MAX_VALUE
Kotlin Long
class(以及所有其他在 Java 中有对应项的)是包装器,这取决于类型是否可为空或不在内部表示值(在JVM)与int
(原始,不可为空)或Integer
(对象,可为空)。
看看here:
Represents a 64-bit signed integer.
On the JVM, non-nullable values of this type are represented as values of the primitive typelong
.
Kotlin 和 MAX_VALUE
的 Java 版本都是 9223372036854775807L
,但由于 kotlin.Long
是一个包装器,它的实现可能会改变,这可能会改变 MAX_VALUE
,所以最好坚持kotlin.Long.Companion.MAX_VALUE
。
这是一个普遍现象:Kotlin标准库的很大一部分与Java中的基本相同。这样
Kotlin 可以提供更精确的类型:nullable 与 non-nullable 或
List
与MutableList
;可以从 Kotlin-JS 或 Kotlin-Native 或其他未来的 Kotlin 实现访问库的这一部分。
出于这两个原因,请坚持使用 Kotlin 标准库类型和方法,除非您有某些特定需要使用 Java 类型和方法。
Long
(和 Int
等)甚至是一种特殊情况,因为它们对应于不止一种 Java 类型:在某些情况下,它们最终会成为原始版本 (long
),在其他版本中是盒装版本 (java.lang.Long
)。您大多不关心 Kotlin 中的这种差异,因此有更好的理由继续使用 kotlin.Long
.