一个小程序的问题(关于byte型计算)
class test2
{
public static void main(String[] args)
{
byte a=1;
int i;
for(i=0;i <=8;i++)
{
a=a*2;
System.out.println( "The output is "+a);
}
}
}
结果显示:
test2.java:9: possible loss of precision
found :int
required: byte
a=a*2;
1 error
求教各位应当怎么解决?
------解决方案--------------------public class test { //觉得可能是因为*和/运算的时候直接内
//部转换成int了,所以没有办法计算。
//但是换成+就没有这个问题
public test() {
}
public static void main(String[] args)
{
byte a=1;
int i;
for(i=0;i <=8;i++)
{
a += a; //因为a*2 = a + a,这样就没有问题了
System.out.println( "The output is "+a);
}
}
}
------解决方案--------------------强制类型转换
a = (byte)(a*2);
------解决方案--------------------byte(+-*/)之后都转换成int型.你的A变量是byte型.需强制转换
------解决方案--------------------byte(+-*/)之后都转换成int型.你的A变量是byte型.需强制转换
应该是这个道理的!
但是k4u_fish() 说的那样也能通过编译的,没有强制转换,为什么呢?而把a+=a 换成a=a+a则又会出错,为什么呢?a+=a 和a=a+a 应该是完全等价的啊!
------解决方案--------------------在这方面+和+=是不等价的
+=已经转换成byte型的了
------解决方案--------------------2是默认为int型的
所以在进行a=a*2计算时,将进行强制类型转换
------解决方案--------------------a *= 2;
------解决方案--------------------a*2就已经是int类型的,需要强制转换成byte的吧
我觉得是这样
不知道对不对
------解决方案--------------------a=a+b (有自动类型提升)
a+=b (无自动类型提升)
a++(无自动类型提升)
------解决方案--------------------算出a*2的结果是int型的 把int型赋给byte型当然是错的了