【问题标题】:Byte arithmetic: How to subtract to a byte variable? [duplicate]字节算术:如何减去字节变量? [复制]
【发布时间】:2013-03-20 20:00:13
【问题描述】:

当我尝试做这样的事情时遇到错误:

byte a = 23;
a = a - 1;

编译器给出这个错误: Test.java:8:发现可能的精度损失:int required:byte a = a - 1; ^ 1 个错误

强制转换不能解决错误... 为什么编译器不让我这样做? 我是否需要将变量“a”转换为 int?

【问题讨论】:

标签: java byte


【解决方案1】:

这样做:

a -= 1;

您甚至不需要显式转换,编译器/JVM 会为您完成。

您是否应该将变量类型更改为 int 没有人可以说,只有您提供的信息。

变量类型由您计划使用它执行的任务定义。

如果你的变量 a 计算某人手上的手指,你为什么要使用 int?字节类型已经足够了。

【讨论】:

    【解决方案2】:

    在 Java 数学中,在计算之前,所有内容都至少提升为 int。这称为Binary Numeric Promotion (JLS 5.6.2)。所以这就是编译器找到int 的原因。要解决此问题,请将整个表达式的结果转换回 byte

    a = (byte) (a - 1);
    

    【讨论】:

      【解决方案3】:

      这样做。

      a = (byte)(a - 1);
      

      当你从 a 中减去 1 时,它的整数值。因此,要以字节为单位分配结果,您需要进行显式类型转换。

      【讨论】:

      • 谢谢!我在“1”而不是表达式的结果中应用了强制转换,这是我的错误。再次感谢。
      【解决方案4】:

      a = a - 1; // 这里在减法之前将 a 提升为 int 数据类型,'a-1' 的结果变为 int 不能存储在 byte 中(byte = 8bits and int = 32 bits)。

      这就是为什么你必须将它转换为一个字节,如下所示:

      a = (byte) (a - 1);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-14
        • 2016-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-02
        • 2015-09-11
        相关资源
        最近更新 更多