【问题标题】:Using plus equals operator with bytes对字节使用加号等于运算符
【发布时间】:2016-05-15 04:12:34
【问题描述】:

下面的代码给了我以下错误。

错误:类型不匹配:推断类型为 kotlin.Int 但预期为 kotlin.Byte

var temp: Byte = 0
var temp2: Byte = 1
temp += temp2

在 kotlin 中有什么方法可以解决这个问题,还是我不允许在 Byte 中使用 += 或 -= 运算符?加号是否重载 Long 和 Int 而不是 Byte 和 Short?

【问题讨论】:

标签: kotlin


【解决方案1】:

根据kotlin docs Byte 与其他 Byte 的加/减运算将产生一个 Int。因此,尽管您认为这很奇怪,但尝试将值为 255 的字节添加到其他值为 255 的字节;)

我认为他们是故意的。如果您确定您的结果仍在字节范围内,则只需使用 Int.toByte() 并结束计算。

【讨论】:

  • 您发现了问题,但在我看来,plus 和 minus 应该返回 Byte 和 Short 而不是 int。我目前正在我的代码中执行 temp = (temp + temp2).toByte() 虽然我宁愿使用 += 运算符。
  • 添加后出现溢出怎么办?应该自动截断为字节还是让它溢出? Kotlin 的主要目标是让开发人员的生活更安全(因此采用了可空性的新方法),我认为您遇到的问题正是这种情况。
  • @R4J 是的,尽管Ints 甚至Longs 也是如此。并不是说我同意Byte + Byte 应该返回一个Byte,只是按照这个逻辑Int + Int 应该返回一个Long。此外,还有一些需要溢出的合理用例。
  • 是的。我猜没有明显的选择。
猜你喜欢
  • 1970-01-01
  • 2019-07-06
  • 2018-01-02
  • 2019-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-01
  • 2013-09-18
相关资源
最近更新 更多