Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么字节上的算术运算在kotlin中返回int?_Kotlin_Integer Arithmetic - Fatal编程技术网

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

为什么字节上的算术运算在kotlin中返回int?,kotlin,integer-arithmetic,Kotlin,Integer Arithmetic,考虑以下代码: val x1: Byte = 0x00 val x2: Byte = 0x01 val x3: Byte = x1 + x2; 这会导致编译错误,因为添加2Bytes的结果是Int 为了解决这个问题,我需要手动将结果转换回字节: val x3: Byte = (x1 + x2).toByte() 这是非常反直觉的。为什么算术运算符是这样工作的 这是非常反直觉的。为什么算术运算符是这样工作的 它也是Java语义的精确副本。Java没有字节码来添加两个bytes、chars或sh

考虑以下代码:

val x1: Byte = 0x00
val x2: Byte = 0x01
val x3: Byte = x1 + x2;
这会导致编译错误,因为添加2
Byte
s的结果是
Int

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

val x3: Byte = (x1 + x2).toByte()
这是非常反直觉的。为什么算术运算符是这样工作的

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

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


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

为什么算术运算符会这样工作?
如果不询问Kotlin的开发人员,很难回答。这就是它的定义方式:
public operator fun plus(其他:Byte):Int
,因为Java(以及其他类似C的语言)将比Int更窄的类型升级为Int,