我完美地编写了我的java代码,但是这个错误(internal.java:21:错误:不兼容类型:从整数到字节的可能有损转换)反复出现。但是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:错误:不兼容的类型:可能存在从整数到字节的有损转换a=(字节)c+b;^1错误
发布于 2019-09-14 21:52:17
java中的byte是8位大小,限制在-128到127之间。假设a= 127,b= 127这样的场景。因此,如果将a和b进行相加,则值为254,这是byte数据类型所不能支持的。
因此,当您添加两个byte类型变量时,输出将自动转换为int。所以它应该由int分配。
因此,通过隐式强制转换将a+b的输出分配给一个字节,将会溢出,并且结果将不正确。
发布于 2019-09-14 22:10:10
在Java中,一个字节可以容纳从-128到127的值,如果你传递的值大于127,会导致字节溢出,无法容纳它,所以它会导致异常,但当你将加法或大于127的值强制转换为字节时,它将尝试获得负范围值-128,并从那里继续重复,比如如果字节a=10;和字节b=120;然后字节c=(字节)(a+b);将返回-126,因为它是大于127的3个数字,现在它转到-128,-127和-126值将被接受。因此,为了得到这个值丢失修复,编译器会强制你接受c作为int,这样你想要的实际值就不会有损失。
https://stackoverflow.com/questions/57936111
复制相似问题