为什么在 kotlin 中对 bytes return an int 进行算术运算?
Why do arithmetic operations on bytes return an int in kotlin?
考虑这段代码:
val x1: Byte = 0x00
val x2: Byte = 0x01
val x3: Byte = x1 + x2;
这会产生编译错误,因为添加 2 Byte
的结果是 Int
。
要解决这个问题,我需要手动将结果转换回一个字节:
val x3: Byte = (x1 + x2).toByte()
这非常违反直觉。为什么算术运算符是这样工作的?
This is very counter-intuative. Why do the arithmetic operators work like this?
它也是 Java 语义的精确副本。 Java 没有添加两个 byte
、char
或 short
的字节码。虽然 Kotlin 可以决定改变语义并发出更复杂的字节码,但选择与 Java 保持一致有其优点。
类似的问题是 "why is Byte
a signed type?",答案也类似。 Kotlin 旨在让经验丰富的 Java 开发人员感到熟悉。
考虑这段代码:
val x1: Byte = 0x00
val x2: Byte = 0x01
val x3: Byte = x1 + x2;
这会产生编译错误,因为添加 2 Byte
的结果是 Int
。
要解决这个问题,我需要手动将结果转换回一个字节:
val x3: Byte = (x1 + x2).toByte()
这非常违反直觉。为什么算术运算符是这样工作的?
This is very counter-intuative. Why do the arithmetic operators work like this?
它也是 Java 语义的精确副本。 Java 没有添加两个 byte
、char
或 short
的字节码。虽然 Kotlin 可以决定改变语义并发出更复杂的字节码,但选择与 Java 保持一致有其优点。
类似的问题是 "why is Byte
a signed type?",答案也类似。 Kotlin 旨在让经验丰富的 Java 开发人员感到熟悉。