【问题标题】:How to fix this error : incompatible types: possible lossy conversion from int to byte如何修复此错误:不兼容的类型:从 int 到 byte 的可能有损转换
【发布时间】:2020-01-16 01:36:14
【问题描述】:

我完美地编写了我的 java 代码,但是这个 ERROR (internal.java:21: error: incompatible types: possible lossy conversion from int to byte) 反复出现。但是 a,b,c 变量是字节数据类型。所以请帮助解决这个问题。为什么这个问题带给我。请从技术上解释这个问题。

我已经使用了诸如 a=(byte)(c+b) 之类的类型转换,它可以工作。但是为什么会出现这个错误。所以请解释这个错误。

类国际 {

public static void main(String[] args) 
{
    byte a = 20 , b = 10, c = 20 ;

    if(a<=b && a<=c)
    {
        a = c+b;

        System.out.println(a);
    }
    else if(b>=c)
    {
        a +=b;

        System.out.println(a);
    }

    else 
    {
        a+=c;

        System.out.println(a);
    }



    float t = (a/40.0f)*10;

    System.out.println("internal mark is : "+ t);
}

}

internal.java:21:错误:不兼容的类型:从 int 到 byte 的可能有损转换 a = (字节)c+b; ^ 1 个错误

【问题讨论】:

标签: java


【解决方案1】:
java中的

byte8位大小,限制为-128到127。所以假设像 if a = 127 and b = 127 这样的场景。所以如果你将a和b相加,则值为254,这是byte数据类型无法容纳的。

所以当你添加两个byte 类型变量时,输出会自动转换为int。所以应该是int分配的。

所以通过隐式转换将 a+b 的输出分配给一个字节,会溢出,结果将不正确。

【讨论】:

  • 这是编译时错误,我没有在代码中的 a、b 和 c 变量中给出任何值
  • 是的,它会给出编译时错误。由于编译器不知道在运行时将为 a 和 b 分配什么值。所以总是添加两个字节类型变量总是由编译器输出为 int。
【解决方案2】:

在 Java 中,一个字节可以容纳从 -128 到 127 的值,如果您传递的值超过 127,这将导致字节溢出并且无法容纳它,因此会导致异常,但是当您将加法或大于 127 的值转换为 byte 它将尝试获得负范围值 -128 并从那里继续重复,例如 byte a=10;字节 b=120;然后字节 c=(字节)(a+b);将返回 -126,因为它比 127 多 3 个数字,现在它变为 -128、-127 和 -126 值。因此,要获得此值损失修复,编译器将强制您将 c 视为 int,这样您想要的实际值就不会丢失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多