【问题标题】:datatype byte in java not allowing to add any literaljava中的数据类型字节不允许添加任何文字
【发布时间】:2012-04-25 15:38:43
【问题描述】:

我正在尝试一些这样的java代码

class Test {
public static void main (String [] args){
    byte b = 10;
    b = b + 10;
}

}

当我尝试编译时保存后,它给了我一个错误

D:\java\Test.java:4: possible loss of precision

找到:int 必需:字节 b = b + 10; ^ 1 个错误

但是如果尝试这样的事情就不行了

b++;
b+=10;

完全没问题 这是什么原因?

【问题讨论】:

  • 这只是这个问题的几乎重复。另一个问题是“Java 语言定义中的什么导致了这种行为?”,而这个问题是“什么是这种行为的原因”,询问语言定义的动机。

标签: java


【解决方案1】:

你必须把你的原始代码写成

b = (byte)(b + 10);

问题在于b + 10 是 int 类型,因为字节被扩展为 int。

这是因为存在概念上的歧义,如果 b 为 120。那么 b+10 等于 130,还是等于 -126?

Java设计者决定在这种情况下应该在int中进行加法,这样120+10就是130,那么就不能存入一个字节了。

对于b+=10,明明要修改b,所以是字节加法。

【讨论】:

    【解决方案2】:

    它说possible loss of precision,因为编译器认为可能是在将10 加到b 之后,它可能会超过byte 大小的限制,但是当您使用b++ 或@987654325 时@ 它不仅只是自动添加10,还自动添加typcasting,以便在编译器级别确认b 的值不会超出byte 大小的限制。

    【讨论】:

      猜你喜欢
      • 2010-12-31
      • 2021-06-09
      • 2016-03-21
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多