为什么对字节的算术运算在 kotlin 中返回 int?

Tid*_*ddo 3 kotlin integer-arithmetic

考虑这个代码:

val x1: Byte = 0x00
val x2: Byte = 0x01
val x3: Byte = x1 + x2;
Run Code Online (Sandbox Code Playgroud)

这会产生编译错误,因为添加 2 Bytes的结果是Int.

为了解决这个问题,我需要手动将结果转换回一个字节:

val x3: Byte = (x1 + x2).toByte()
Run Code Online (Sandbox Code Playgroud)

这是非常违反直觉的。为什么算术运算符会这样工作?

Mar*_*nik 6

这是非常违反直觉的。为什么算术运算符会这样工作?

它也是 Java 语义的精确副本。Java 没有用于添加两个bytes、chars 或shorts 的字节码。虽然 Kotlin 可以决定改变语义并发出更复杂的字节码,但选择与 Java 保持一致有其优点。

一个类似的问题是“为什么是Byte有符号类型?” 答案将是类似的。Kotlin 旨在让有经验的 Java 开发人员感到熟悉。


归档时间:

查看次数:

305 次

最近记录:

6 年,11 月 前